最佳答案
我正在寻找涉及将c++模板函数作为参数传递的规则。
这是c++支持的,如下面的例子所示:
#include <iostream>
void add1(int &v)
{
v+=1;
}
void add2(int &v)
{
v+=2;
}
template <void (*T)(int &)>
void doOperation()
{
int temp=0;
T(temp);
std::cout << "Result is " << temp << std::endl;
}
int main()
{
doOperation<add1>();
doOperation<add2>();
}
然而,学习这种技术是困难的。搜索“函数作为模板参数”没有什么意义。令人惊讶的是,经典的c++模板的完整指南也没有讨论它(至少从我的搜索中没有)。
我的问题是这是否是有效的c++(或者只是一些广泛支持的扩展)。
另外,在这种模板调用过程中,是否有一种方法允许具有相同签名的函子与显式函数互换使用?
下面的不可以在上面的程序中工作,至少在Visual c++中是这样,因为语法显然是错误的。如果能够将函数转换为函子(反之亦然)就很好了,类似于如果想定义自定义比较操作,可以将函数指针或函子传递给std::sort算法。
struct add3 {
void operator() (int &v) {v+=3;}
};
...
doOperation<add3>();
指向一两个web链接的指针,或者c++模板书中的一个页面将是非常感谢的!