开发者

Partially defaulting template arguments using typedefs?

I am trying to do something like this:

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

template <typename T>
typedef Pointer<T,false> W开发者_Python百科eakPointer;

But this is a compile error ("a typedef template is illegal" VC).

I am trying to avoid doing this using inheritance, beacuse that's more unnecessary work (rewriting constructors, operator =, back-and-forth casting, friendship...).

Any ideas?


C++0x will alleviate this issue, but as it stands you cannot.

The common work-around is this:

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

template <typename T>
struct WeakPointer
{
    typedef Pointer<T,false> value_type;
};

So instead of:

typedef WeakPointer<int> WeakInt;

You get:

typedef WeakPointer<int>::value_type WeakInt;


C++03 doesn't support templated typedefs. You'd have to specify both types:

typedef Pointer<int,false> WeakIntPointer;

I know that isn't very helpful, but it's a reality of the language. Luckily, C++0x will support template typedefs.

For now, you'd really have to make a templated WeakPointer class which takes a template parameter to indicate the type.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜