C ++ Typelist с типами шаблонов имеет индекс и типовые операции, которые не работают вместеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ Typelist с типами шаблонов имеет индекс и типовые операции, которые не работают вместе

Сообщение Anonymous »

Для проекта, над которым я работаю, я пытался внедрить типов с Template Class.s в качестве возможных типов. Соответствующие части моей реализации приведены ниже. Он работает хорошо, но не работает, как и ожидалось, когда я объединяю некоторые типы утилит /операции вместе. < /P>

Код: Выделить всё

// template class typelist
template 
struct TemplateTypeList {};

// utility types for TemplateTypeList
// type at index of typelist
template 
struct TemplateTypeListType;

template 
struct TemplateTypeListType {
template 
using result = First;
};

template 
struct TemplateTypeListType {
template 
using result = typename TemplateTypeListType::template result;
};

// index of type in typelist
template 
struct TemplateTypeListIndex;

template 
struct TemplateTypeListIndex {
static const int result = 0;
};

template 
struct TemplateTypeListIndex {
private:
using ResultOfPrior = TemplateTypeListIndex;
public:
static const int result =  ResultOfPrior::result == -1 ? -1 : ResultOfPrior::result + 1;
};

template 
struct TemplateTypeListIndex {
static const int result = -1;
};
Реализация работает нормально для большинства моих случаев, но когда я использую TemplateTypelistIndex с результатом TemplateTypelistType , похоже, не работает. Вот пример: < /p>
template
struct Class1 {};

template
struct Class2 {};

using Types = TemplateTypeList;

int index = TemplateTypeListIndex::result;

ASSERT_EQ(index, 0); // fails, index == -1
< /code>
Я довольно озадачен, потому что он работает почти в любом другом случае, для которого я использовал его. Есть ли какое -то предположение, которое я делаю со своими неверными специализациями шаблона, вызывая эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ont-work-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»