模板中定义类型未知的函数
请问如何在一个模板中定义类型未知的函数呢?
我需要将一段程序的多个步骤和其中的某个操作分离,比如说:
#include <iostream>
template <typename T>
T adder(T a, T b)
{
return a + b;
}
template <T F(T, T)> //--- Here
T executor(T a, T b)
{
return F(a, b);
}
int main()
{
std::cout << executor<adder>(1, 2);
std::cout << executor<adder>(3.0f, 4.0f);
return 0;
}
但是上面template <T F(T, T)>中的T是不能被编译器识别的,怎样解决这个问题呢?
我自己找到答案了,这个贴就让沉掉吧(不知道怎么关闭╮(╯▽╰)╭):
#include <iostream>
template <typename T>
T adder(T a, T b)
{
return a + b;
}
template <typename T, T F(T, T)>
T executor(T a, T b)
{
return F(a, b);
}
int main()
{
std::cout << executor<int, adder>(1, 2);
std::cout << executor<float, adder>(3.0f, 4.0f);
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在这里首先要确定好adder的类型,才能推到出executor的类型。而源程序中adder的类型是由executor的函数参数确定的,推导先后次序出了问题,所以可以通过手动给出adder类型的方法解决。当然也许有更好的方法?