1

私はこのようなことをしようとしています:

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

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

しかし、これはコンパイル エラーです (「typedef テンプレートは不正です」VC)。

継承を使用してこれを回避しようとしていますが、これは不要な作業 (コンストラクターの書き換え、演算子 =、前後のキャスト、友情など) であるためです。

何か案は?

4

2 に答える 2

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;
于 2009-11-21T00:48:49.493 に答える
2

C++03 は、テンプレート化された typedef をサポートしていません。両方のタイプを指定する必要があります。

typedef Pointer<int,false> WeakIntPointer;

あまり役に立たないことはわかっていますが、それは言語の現実です。幸いなことに、C++0xはテンプレートの typedef をサポートします。

今のところ、型を示すためにテンプレート パラメーターを取るテンプレート化された WeakPointer クラスを作成する必要があります。

于 2009-11-21T00:44:16.893 に答える