При создании типов без дополнительных функций я стараюсь использовать using
вместо того, чтобы создавать подклассы или использовать typedef
,
У меня есть иерархия CRTP, где я пытаюсь распространять конкретный тип вверх по дереву.
GrandKid
похоже компилируется нормально. Есть ли способ получить GrandKid_2
работать?
СООБЩЕНИЕ ОБ ОШИБКЕ
junk.cpp:18:26: error: ‘GrandKid_2’ was not declared in this scope
КОД
template<typename T>
struct Parent
{
};
template<typename T>
struct Child
: public Parent<T>
{
};
struct GrandKid :
public Child<GrandKid>
{
};
// using GrandKid_2 = Child<GrandKid_2>; // doesn't compile
int
main( int argv, char* argc[] )
{
GrandKid gk; // ok
}
using
, лайк typedef
создает псевдоним, а не новый тип. Следовательно, вы не можете использовать GrandKid_2 для определения себя.
Вам обязательно нужно будет создать новый тип:
struct GrandKid_2 : Child<GrandKid_2> {};
Кстати, вы действительно хотите GrandKid_2
быть собственным ребенком? Может быть, вы имели в виду using GrandKid_2 = Child<GrandKid>
Других решений пока нет …