`typedef T this_type`, который не требует T

По сути, мне нужно знать текущий класс, чтобы я мог создавать макросы, которые выполняют такие вещи, как:

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

без необходимости помещать MyClass в качестве параметра в макрос. Я пробовал всевозможные смешные вещи, такие как:

typedef decltype(*this) this_type;

но, конечно, они не работают. Нет НИЧЕГО, что позволит мне обойти это? Я надеялся, что C ++ 11 даст нам что-то, что можно взломать.

0

Решение

Две вещи: я бы не стал возиться с необходимостью повторения шрифта и вообще не использовал бы макросы. Вы можете использовать CRTP:

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

Затем в каждом типе используйте наследование, чтобы привести typedefs в ваш тип:

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

[*] Поскольку вы пометили вопрос как C ++ 11, вы должны использовать std::shared_ptr что является стандартным, а не boost::shared_ptr

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]