У меня есть следующий класс с двумя функциями получения:
class Class
{
public:
auto& get() { /* implementation omitted */ }; // call this function 1
const auto& get() const { /* implementation omitted */ }; // call this function 2
//... rest omitted
};
Поскольку базовый код, с которым я имею дело, сильно шаблонизирован, его трудно обойти, используя ключевое слово auto.
Кроме того, я имею дело с стандарт кода, который запрещает мне использовать auto без конечного возвращаемого типа.
Перепишем вышеприведенное с помощью:
auto get() -> decltype(auto); // function 1
auto get() const -> decltype(auto); // function 2
соответствует указанному стандарту кода. Я пробовал другие комбинации, например
auto& get() -> decltype(auto);
auto get() -> decltype(auto&);
но они не компилируются. Первый дает:
function with trailing return type has 'auto&' as its type rather than plain 'auto'
Второй дает:
error: expected ')' before '&' token
Сохраняет ли приведенное выше решение исходное поведение? То есть, если я это сделаю:
int main()
{
Class myObj{};
auto& a{myObj.get()}; //
Подробнее здесь: https://stackoverflow.com/questions/784 ... make-sense
Имеет ли смысл auto function() -> decltype(auto)? [дубликат] ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Основы функции - Function Function Function, выходящая из INT, более 99 [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Частичная специализация шаблона класса с нетиповым параметром шаблона decltype(auto)
Anonymous » » в форуме C++ - 0 Ответы
- 64 Просмотры
-
Последнее сообщение Anonymous
-