我正在学习模板功能和搜索,试图让它工作几个小时,但我找不到。
#include <iostream>
using namespace std;
template<typename A, typename B, typename C>
C add (A a, B b){
return a + b;
}
int main() {
int x = 1;
float y = 2.5;
float z = add(x,y);
cout << "z is: " << z ;
return 0;
}
我发现的另一个解决方案是
template <type name A, typename B>
auto add(A a, B b){
return a + b;
}
int main() {
int x = 1;
float y = 2.5;
cout << add(x,y);
}
第二个代码工作正常,返回类型会自动更改我设置的任何参数类型。但是,当我为返回类型添加一个<typename C>
的add函数时,它会显示错误消息。如何在主函数中运行它?
答案 0 :(得分:0)
您可以使用通过std::declval()
和decltype()
定义的默认返回模板参数。
以下是一个例子
#include <iostream>
#include <functional>
template <typename A, typename B,
typename C = decltype(std::declval<A>() + std::declval<B>())>
C add (A a, B b)
{ return a + b; }
int main()
{
int x = 1;
float y = 2.5;
float z = add(x,y);
std::cout << "z is: " << z << std::endl;
}
当auto
返回类型(没有-> decltype()
)从C ++ 14开始有效时,这也适用于C ++ 11。