いくつかのテンプレートクラスが宣言されていて、共有ポインタをtypedefしたいとします。どうすればいい?typedefテンプレート化されたクラスを含む共有ポインタ
template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error
いくつかのテンプレートクラスが宣言されていて、共有ポインタをtypedefしたいとします。どうすればいい?typedefテンプレート化されたクラスを含む共有ポインタ
template<typename T> class Arg;
typedef std::tr1::shared_ptr<Arg> ArgPtr; // Compiler error
あなたはまた、おそらくテンプレートの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>>;
これは、Arg
が実際のタイプではないためです。たとえば、Arg<int>
が1になります。コンパイラがコンパイルしたくない理由です。あなたは、たとえばことを書かれている必要があります。
template<typename T> class Arg;
template<typename T>
using ArgPtr = std::tr1::shared_ptr<Arg<T>>;
はおそらく関連:
C++ 11では、あなたは
using
キーワードで直接エイリアシングテンプレートを使用することができます。は、C++ 03では、としてハックを必要とします[多次元std :: array]を宣言するためのあまり冗長な方法](http://stackoverflow.com/q/7689288/636019) – ildjarn