Это может быть глупый вопрос, но я хотел бы, чтобы это прояснилось. Допустим, у меня есть шаблон функции следующим образом:Возврат типа возвращаемого типа из lvalue?
template<class T> T getValue(const char *key) const;
, который возвращает значение в качестве T
из внутренней памяти, где она хранится под key
(и, возможно, как уже типа Т).
Теперь для того, чтобы использовать это мне нужно указать тип возвращаемого шаблона T
в вызове функции, например:
int value = getValue<int>("myKey");
а то, что я хотел бы, чтобы это сделать, это вывести аргумент шаблона из контекста , в частности, lvalue
так:
int value = getValue("myKey"); //getValue<int>() is instantiated with int being deduced automatically from lvalue
, но я предполагаю, что это не возможно, но я довольно нечеткая, почему. Я знаю, что использование auto
не позволит компилятору вывести тип шаблона, но почему это так?
шаблона экземпляра может только вывести его параметры из аргументов данного шаблонного объекта (функция в этом case), так что нет, тип переменной не имеет значения при выводе, и вам либо нужно доказать фиктивный аргумент функции, либо код жесткого кода, как и во втором, последнем коде сценария. – Creris
Простой ответ, спасибо. Не могли бы вы перепроверить его в качестве ответа, чтобы я мог его принять? – Resurrection
Возможно получить что-то подобное, возвращая прокси-объект, у которого есть оператор 'template оператор T() const;' функция преобразования. Эта функция преобразования может выводить тип 'T', потому что должно быть преобразование между типом прокси-объекта и значением' int. Это, конечно, ломается с 'auto', так как это просто сохранит прокси-объект (возможно сделать объект-прокси невозможным и невозвратным, но' auto && 'и' auto const & 'будут по-прежнему работать). –
dyp