函数作为模板参数传递
我正在寻找涉及将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 ++(或者只是一些广泛支持的扩展)。
另外,在这种模板调用过程中,有没有办法允许具有相同签名的仿函数与显式函数互换使用?
以下就不能在上面的程序中工作,至少在视觉C ++,因为语法显然是错误的。能够为仿函数切换函数是很好的,反之亦然,类似于如果要定义自定义比较操作,可以将函数指针或函子传递给std :: sort算法。
struct add3 { void operator() (int &v) {v+=3;} };... doOperation<add3>();
指向一个或两个Web链接的指针,或C ++模板书中的页面将不胜感激!
潇潇雨雨
相关分类