【问题标题】:typedef a shared pointer that contains a templated classtypedef 一个包含模板类的共享指针
【发布时间】:2012-05-03 21:00:53
【问题描述】:

假设我已经声明了一些模板类,并且我想 typedef 一个指向它的共享指针。我该怎么做?

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

【问题讨论】:

标签: c++ class templates shared-ptr forward-declaration


【解决方案1】:

您可能还需要模板 typedef。阅读 Sutter 的article

在 C++03 中,你需要一个 hack:

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

在 C++11 中,您可以直接通过 using 关键字使用模板别名:

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

【讨论】:

    【解决方案2】:

    那是因为Arg 并不是真正的类型。 Arg&lt;int&gt; 例如是一个。这就是编译器不想编译的原因。例如,您应该这样写:

    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>>;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2018-10-09
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多