Переменная класса шаблона с параметром шаблона класса шаблона, установленным в базовый шаблон производного шаблона с переменной - PullRequest
13 голосов
/ 08 июня 2011

Я пытаюсь получить производный класс (обычный шаблон), в котором есть переменная типа шаблона, имеющая в качестве параметра класса шаблона тип базового класса (обычный шаблон, тот же параметр, что и у производного класса)производный класс (класс с переменной).Это делает VC ++ невероятно злым на меня, и я не могу успокоить его ярость.Вот краткий пример:

template<template<typename VT> class CT, typename VT> struct encapThing {};

template<typename VT> struct innocuousBase {};

template<typename VT> struct derivOfDoom : public innocuousBase<VT>
{
    encapThing<innocuousBase, VT> ohgodhelp; //C3200
};

Он выдаст C3200, сказав, что ожидает шаблон класса.Теперь я могу понять, почему можно подумать, что внутри шаблонов существует рекурсивный цикл шаблонов, даже если это не на самом деле .Как я могу убедить VC ++ иначе?

1 Ответ

4 голосов
/ 08 июня 2011

Неквалифицированное использование innocuousBase внутри derivOfDoom<> интерпретируется как innocuousBase<VT>, так же как неквалифицированное использование derivOfDoom в этом контексте будет интерпретироваться как derivOfDoom<VT>. Я не помню, является ли это стандартно-совместимым поведением или нет, но обходной путь тривиален: полностью квалифицируемый innocuousBase, поэтому компилятор знает, что вы имеете в виду шаблон класса innocuousBase, а не базовый класс innocuousBase<VT> :

template<typename VT> struct derivOfDoom : innocuousBase<VT>
{
    encapThing<::innocuousBase, VT> ohgodhelp;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...