Для некоторого синтаксического сахара я хочу вернуть ссылку на this
, но при наследовании функция должна возвращать тип дочернего класса:
class base {
T &operator!() { return *this; }
};
base b; b = !b;
class child : public base {};
child c; c = !c;
Из-за оператора я не могу просто вернуть указатель и выполнить его динамическое приведение, это должна быть ссылка.
Это вообще возможно? Использование decltype(*this)
для T не работает, как и auto f()->decltype(*this)
из-за this
(хотя я не понимаю, почему, в случае с авто)
В Scala вы можете написать что-то вроде:
template<typename T> class base {
T &f() { return *this; }
};
class child : public base<child> {};
Но мой g++ не примет это (не уверен, что это ошибка или просто нет в спецификации?)
Конечно, есть явный способ, но интересно, можно ли этого избежать, используя функции С++ 11?
class child : public base {
child &operator!() { base::operator!(); return *this }
};