CRTP 在 derived class from base class 中引用 typedef
CRTP refer to typedef in derived class from base class
我有以下代码:
template <typename T>
class A
{
typedef typename T::Type MyType;
};
template <typename T>
class B : public A<B<T>>
{
typedef T Type;
};
当我尝试实例化 B 时,我使用 MSVS 2015 收到以下错误消息:
'Type': is not a member of 'B<int>'
这段代码是有效的 C++ 还是 MSVS 正确?
问题就出在这里
template <typename T>
class A
{
typedef typename T::Type MyType;
^^^
};
T
需要是一个完整的类型。但在你的情况下,当 A<T>
在这里实例化时:
template <typename T>
class B : public A<B<T>>
^^^^^^^
B<T>
还不是一个完整的类型!所以不幸的是这不能工作。
简单的解决方法就是单独传入Type
:
template <typename T, typename Type>
class A
{
typedef Type MyType;
};
template <typename T>
class B : public A<B<T>, T>
{
};
我有以下代码:
template <typename T>
class A
{
typedef typename T::Type MyType;
};
template <typename T>
class B : public A<B<T>>
{
typedef T Type;
};
当我尝试实例化 B 时,我使用 MSVS 2015 收到以下错误消息:
'Type': is not a member of 'B<int>'
这段代码是有效的 C++ 还是 MSVS 正确?
问题就出在这里
template <typename T>
class A
{
typedef typename T::Type MyType;
^^^
};
T
需要是一个完整的类型。但在你的情况下,当 A<T>
在这里实例化时:
template <typename T>
class B : public A<B<T>>
^^^^^^^
B<T>
还不是一个完整的类型!所以不幸的是这不能工作。
简单的解决方法就是单独传入Type
:
template <typename T, typename Type>
class A
{
typedef Type MyType;
};
template <typename T>
class B : public A<B<T>, T>
{
};