我想知道在C ++ 14中是否可以以某种方式在赋值中返回类型推导。在<int>
函数名称后键入return_five
会感到多余。因此,换句话说,编译器是否可以使用分配左侧的信息?
#include <iostream>
#include <string>
template<typename T>
auto return_five()
{
return static_cast<T>(5);
}
int main()
{
int five_int = return_five(); // THIS DOES NOT WORK
// int five_int = return_five<int>(); // THIS WORKS
std::cout << "Five_int = " << five_int << std::endl;
return 0;
}
答案 0 :(得分:3)
C ++ ain&lt; VBA:作业左侧的内容是不用于推断右侧的类型。
因此编译器需要return_five()
的显式类型。您可以通过编写return_five<int>()
来告知编译器类型。
答案 1 :(得分:1)
不,但这是你能做的最好的事情:
int main() {
auto five_int = return_five<int>();
// ...
}
答案 2 :(得分:0)
它不是返回类型推导,而是模仿返回类型:
template<typename T>
T return_five()
{
return 5;
}
答案 3 :(得分:0)
这是不可能的。函数的模板参数仅从函数参数推导出来,而不是从返回类型推导出来(不幸的是)。
您可能不太感兴趣,但推断模板参数的方法如下:
template<typename T>
void return_five(T& value)
{
value = static_cast<T>(5);
}
...
int five_int;
return_five(five_int);
答案 4 :(得分:0)
嗯,这很有效:
struct return_five {
template <class T>
operator T() const { return 5; }
};
int main (int, char**) {
int five_int = return_five();
std::cout << five_int << '\n';
}
提示:您可能不想在生产代码中实际使用它。