基本上,我需要知道当前的类,所以我可以创建像以下几样的宏:
typedef boost::shared_ptr<MyClass> sptr;
typedef boost::shared_ptr<const MyClass> csptr;
//etc
无需将MyClass作为参数添加到宏中。我尝试过各种荒谬的事情:
typedef decltype(*this) this_type;
但当然它们不起作用。没有什么可以让我解决这个问题吗?我希望C ++ 11会给我们一些东西以一种方式破解。
答案 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