0

本质上,我需要知道当前的类,这样我才能制作执行以下操作的宏:

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

无需将 MyClass 作为宏的参数。我尝试过各种荒谬的事情,例如:

typedef decltype(*this) this_type;

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

4

1 回答 1

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

于 2012-10-20T01:36:41.233 回答