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

sol*_*old 1 c++ templates typedef default-value

我想做这样的事情:

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

template <typename T>
typedef Pointer<T,false> WeakPointer;
Run Code Online (Sandbox Code Playgroud)

但这是一个编译错误("typedef模板是非法的"VC).

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

有任何想法吗?

GMa*_*ckG 7

C++ 0x将缓解这个问题,但就目前而言,你不能.

常见的解决方法是:

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

template <typename T>
struct WeakPointer
{
    typedef Pointer<T,false> value_type;
};
Run Code Online (Sandbox Code Playgroud)

所以代替:

typedef WeakPointer<int> WeakInt;
Run Code Online (Sandbox Code Playgroud)

你得到:

typedef WeakPointer<int>::value_type WeakInt;
Run Code Online (Sandbox Code Playgroud)