2

テンプレートクラスを前方宣言していて、それへの共有ポインターをtypedefしたいとします。どうすればいいですか?

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

2 に答える 2

7

テンプレートtypedefも必要になるでしょう。Sutterの記事を読んでください。

C ++ 03では、次のようにハックする必要があります。

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

usingC ++ 11では、次のキーワードを使用してテンプレートエイリアシングを直接使用できます。

template <typename T>
using ArgPtrType = std::shared_ptr<Arg<T>>;
于 2012-05-03T21:05:58.807 に答える
2

それArgは実際にはタイプではないからです。Arg<int>たとえば、1つになります。そのため、コンパイラはコンパイルを望んでいません。たとえば、次のように書く必要があります。

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

C ++ 11を使用した場合は、次のように記述できたと思います。

template<typename T> class Arg;

template<typename T>
using ArgPtr = std::tr1::shared_ptr<Arg<T>>;
于 2012-05-03T21:05:47.327 に答える