我正在寻找涉及将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 ++,因为语法显然是错误的。能够为functor切换一个函数,反之亦然,这很不错,类似于如果您要定义自定义比较操作,可以将函数指针或functor传递给std :: sort算法。
struct add3 {
void operator() (int &v) {v+=3;}
};
...
doOperation<add3>();
指向一个或两个Web链接或C ++ Templates书中的页面的指针将不胜感激!
-std=gnu++17
。 我可以将C ++ 17不捕获lambda constexpr转换运算符的结果用作函数指针模板非类型参数吗?。