это правильно, но я ищу портативное решение, и это не компилируется с GCC :-(
оложим, у вас есть код
template <template<class> class BaseType>
class EST16
: public BaseType<int>
{
public:
EST16(double d)
{
}
};
template <class T>
class SCEST
{
T y;
};
typedef EST16<SCEST> EST16_SC;
class Child
: public EST16_SC
{
public:
Child()
: EST16_SC(1.0)
{
}
};
class NotWorkingChild
: public EST16<SCEST>
{
public:
NotWorkingChild()
: EST16<SCEST>(1.0)
{
}
};
TEST(TemplateTest, TestInstantiate)
{
Child child;
NotWorkingChild notWorkingChild;
}
Child и NotWorkingChild отличаются только typedef. В GCC оба компилируются, в Visual Studio конструктор NotWorkingChild выдает следующую ошибку:
2>..\..\..\src\itenav\test\SCKFErrorStateTest.cpp(43) : error C3200: 'SCEST<T>' : invalid template argument for template parameter 'BaseType', expected a class template
2> with
2> [
2> T=int
2> ]
Можете ли вы объяснить, почему это так? Есть ли лучшее портативное решение, чем typedef?
Спасибо!