Тип включения C ++ в статической функции-члене
Я предполагаю, что это совершенно невозможно, но что, если. Можно ли как-то получить тип включающего класса в статической функции-члене в любой версии C ++?
class Impossible {
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// now do something with EnclosingClass ...
}
}
Есть ли способ получить тип окружающего класса (Impossible
в данном случае) без записи названия класса в функции?
Причина, по которой я хотел бы сделать это, состоит в том, чтобы избежать повторения имени класса в функции. Это может легко привести к сложной ошибке копирования-вставки, если произойдет нечто подобное:
class SomeOther { // another class, with the same interface as Impossible
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// whoops, copy-pasted, forgot to change "Impossible" to "SomeOther"
// now do something with EnclosingClass ...
}
}
Есть ли хороший способ предотвратить подобные вещи? Я мог бы представить, что прикоснулся к чему-то, что было объявлено закрытым во включающем классе, но это заставило бы меня написать дополнительный код (так как мой текущий дизайн не содержит каких-либо внутренних закрытых членов, все является открытым).