Я предполагаю, что это совершенно невозможно, но что, если. Возможно ли каким-то образом получить тип охватывающего класса в статической функции-члене в любой версии С++?
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 ...
}
}
Есть ли хороший способ предотвратить такое явление? Я мог представить, что касался чего-то, что было объявлено частным в окружающем классе, но это заставило бы меня писать дополнительный код (поскольку мой текущий проект не содержит каких-либо неотъемлемых частных членов, все является общедоступным).