Я предполагаю, что это невозможно, но что делать. Возможно ли каким-то образом получить тип охватывающего класса в статической функции-члене, в любой версии 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 ...
}
}
Есть хороший способ предотвратить такого рода вещи происходит? Я мог представить, что касался чего-то, что было объявлено частным в окружающем классе, но это заставило бы меня писать дополнительный код (поскольку мой текущий проект не содержит каких-либо неотъемлемых частных членов, все является общедоступным).
+1 для того, чтобы сообщить нам * почему * вы хотите этого без необходимости выталкивать и подталкивать. –
@jbgs Я не уверен, насколько я понимаю, как это поможет. Вы имеете в виду создание всего шаблона Fun()? Это заставит меня повторять имя класса дважды за каждый вызов, а не только за объявление. Обратите внимание, что хотя Run() будет очень часто (и, следовательно, подвержен ошибкам копирования-вставки), в некоторых случаях это может различаться, поэтому я считаю, что создание глобальной статической функции - это не очень хорошая идея (но опять же , может использоваться шаблонная специализация этой функции). Это вы имели в виду? –
@JohnDibling: Что я действительно нахожу удивительным, что никакие длинные таймеры здесь не начали «но действительно ли это важно»? серия комментариев. Задавать вопросы, подобные этому, - это как пройти через кирпичную стену, вы должны не только объяснить, почему вы хотите это сделать, но и вы должны убедить людей, почему они хотели бы сделать это, прежде чем они вам помогут. В противном случае они просто будут тратить часы, рассказывая вам, почему вы ошибаетесь, и то, что вы ищете, совершенно не нужно, не говоря уже о том, что вы сказали им, почему вы хотите этого.+1 для хорошего вопроса. – Mehrdad