С++ отсутствует эквивалент ключевое слово PHP self
, которое оценивает тип охватывающего класса.
Достаточно легко подделать его для каждого класса:
struct Foo
{
typedef Foo self;
};
но мне пришлось написать Foo
снова. Возможно, однажды я получу это неправильно и сделаю тихую ошибку.
Можно ли использовать некоторую комбинацию decltype
и друзей, чтобы сделать эту работу "автономно"? Я уже пробовал следующее, но this
недействителен в этом месте:
struct Foo
{
typedef decltype(*this) self;
};
// main.cpp:3:22: error: invalid use of 'this' at top level
// typedef decltype(*this) self;
(я не буду беспокоиться о эквиваленте static
, который делает то же самое, но с поздним связыванием.)