我正在寻找涉及将c++模板函数作为参数传递的规则。
这是c++支持的,如下面的例子所示:
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++模板书中的一个页面将是非常感谢的!