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

2 つのこと: 型を繰り返さなければならないことで大騒ぎしたり、マクロをまったく使用したりしません。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>
{
   // ...
};

std::shared_ptr[*] 質問に C++11 のタグを付けたので、標準ではなく標準のものを使用する必要があります。boost::shared_ptr

于 2012-10-20T01:36:41.233 に答える