我正在尝试做这样的事情:
template <typename T,bool Strong=true>
class Pointer {...};
template <typename T>
typedef Pointer<T,false> WeakPointer;
但这是一个编译错误(“typedef 模板是非法的”VC)。
我试图避免使用继承来做到这一点,因为这是更多不必要的工作(重写构造函数、运算符 =、来回转换、友谊......)。
有任何想法吗?
我正在尝试做这样的事情:
template <typename T,bool Strong=true>
class Pointer {...};
template <typename T>
typedef Pointer<T,false> WeakPointer;
但这是一个编译错误(“typedef 模板是非法的”VC)。
我试图避免使用继承来做到这一点,因为这是更多不必要的工作(重写构造函数、运算符 =、来回转换、友谊......)。
有任何想法吗?
C++0x 将缓解这个问题,但目前你不能。
常见的解决方法是:
template <typename T,bool Strong=true>
class Pointer {...};
template <typename T>
struct WeakPointer
{
typedef Pointer<T,false> value_type;
};
所以而不是:
typedef WeakPointer<int> WeakInt;
你得到:
typedef WeakPointer<int>::value_type WeakInt;
C++03 不支持模板化类型定义。您必须指定两种类型:
typedef Pointer<int,false> WeakIntPointer;
我知道这不是很有帮助,但这是语言的现实。幸运的是,C++0x将支持模板类型定义。
现在,你真的必须创建一个模板化的 WeakPointer 类,它接受一个模板参数来指示类型。