2012-05-03 12 views
2

いくつかのテンプレートクラスが宣言されていて、共有ポインタをtypedefしたいとします。どうすればいい?typedefテンプレート化されたクラスを含む共有ポインタ

template<typename T> class Arg; 
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error 
+0

はおそらく関連:

template <typename Arg> struct ArgPtr { typedef std::shared_ptr<Arg> ArgPtrType; }; 

C++ 11では、あなたはusingキーワードで直接エイリアシングテンプレートを使用することができます。

は、C++ 03では、としてハックを必要とします[多次元std :: array]を宣言するためのあまり冗長な方法](http://stackoverflow.com/q/7689288/636019) – ildjarn

答えて

6

あなたはまた、おそらくテンプレートのtypedefをしたい:

template<typename T> class Arg; 
typedef std::tr1::shared_ptr<Arg<int>> ArgPtr; 

あなたがC++ 11で使用した場合、私はあなたがいることを書かれている可能性が推測します。 Sutterのarticleを読んでください。

template <typename T> 
using ArgPtrType = std::shared_ptr<Arg<T>>; 
2

これは、Argが実際のタイプではないためです。たとえば、Arg<int>が1になります。コンパイラがコンパイルしたくない理由です。あなたは、たとえばことを書かれている必要があります。

template<typename T> class Arg; 

template<typename T> 
using ArgPtr = std::tr1::shared_ptr<Arg<T>>; 
関連する問題