По сути, мне нужно знать текущий класс, чтобы я мог создавать макросы, которые выполняют такие вещи, как:
typedef boost::shared_ptr<MyClass> sptr;
typedef boost::shared_ptr<const MyClass> csptr;
//etc
без необходимости помещать MyClass в качестве параметра в макрос. Я пробовал всевозможные смешные вещи, такие как:
typedef decltype(*this) this_type;
но, конечно, они не работают. Нет НИЧЕГО, что позволит мне обойти это? Я надеялся, что C ++ 11 даст нам что-то, что можно взломать.
Две вещи: я бы не стал возиться с необходимостью повторения шрифта и вообще не использовал бы макросы. Вы можете использовать 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>
{
// ...
};
std::shared_ptr
что является стандартным, а не boost::shared_ptr
Других решений пока нет …