使用typedef部分默认模板参数?

时间:2009-11-21 00:41:54

标签: c++ templates typedef default-value

我正在尝试做这样的事情:

template <typename T,bool Strong=true>
class Pointer {...};

template <typename T>
typedef Pointer<T,false> WeakPointer;

但这是一个编译错误(“typedef模板是非法的”VC)。

我试图避免使用继承这样做,因为这是更多不必要的工作(重写构造函数,operator =,来回转换,友谊......)。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

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;

答案 1 :(得分:2)

C ++ 03不支持模板化typedef。您必须指定两种类型:

typedef Pointer<int,false> WeakIntPointer;

我知道这不是很有帮助,但这是语言的现实。幸运的是,C++0x将支持模板typedef。

现在,您真的必须创建一个模板化的WeakPointer类,它使用模板参数来指示类型。