`typedef T this_type`不需要T

时间:2012-10-20 01:31:47

标签: c++ c++11 typedef

基本上,我需要知道当前的类,所以我可以创建像以下几样的宏:

typedef boost::shared_ptr<MyClass> sptr;
typedef boost::shared_ptr<const MyClass> csptr;
//etc

无需将MyClass作为参数添加到宏中。我尝试过各种荒谬的事情:

typedef decltype(*this) this_type;

但当然它们不起作用。没有什么可以让我解决这个问题吗?我希望C ++ 11会给我们一些东西以一种方式破解。

1 个答案:

答案 0 :(得分:3)

两件事:我不会大惊小怪不得不重复这种类型,我根本不会使用宏。您可以使用CRTP:

template <typename T>
struct sp_typedefs {
    typedef std::shared_ptr<T> sptr;         // [*]
    typedef std::shared_ptr<const T> csptr;
};

然后在每种类型中使用继承将typedef带入您的类型:

class MyType : sp_typedefs<MyType>
{
   // ...
};

[*]由于您已将问题标记为C ++ 11,因此您应该使用标准的std::shared_ptr,而不是boost::shared_ptr