CTC без препроцссора - помогите довести до ума!
От: rg45 СССР  
Дата: 13.04.17 21:32
Оценка:
Это не готовая реализация CTC, а только прототип, упрощенный до предела так, чтобы видна была идея.

Достоинства:

Недостатки:


http://rextester.com/ZSP64839

constexpr size_t CTC_MAX = 498;

template <size_t i>
struct Index : Index<i - 1> { static constexpr size_t value = i; };
template <> struct Index<0> { static constexpr size_t value = 0; };

Index<0> generate(...);

#define CREATE_CTC(name) \
   template <typename T = decltype(generate(Index<CTC_MAX>()))> \
   struct name : T \
   { \
      friend Index<T::value + 1> generate(T); \
   };

#define GET_CTC(name) name<>::value

Пример использования:
CREATE_CTC(ctc1)

enum class Foo
{
   zero = GET_CTC(ctc1),
   one = GET_CTC(ctc1),
   two = GET_CTC(ctc1),
   three = GET_CTC(ctc1),
   four = GET_CTC(ctc1),
   five = GET_CTC(ctc1),
};
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 14.04.2017 8:16 rg45 . Предыдущая версия . Еще …
Отредактировано 13.04.2017 22:16 rg45 . Предыдущая версия .
Отредактировано 13.04.2017 21:53 rg45 . Предыдущая версия .
Отредактировано 13.04.2017 21:33 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.