我正在寻找涉及将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++模板书中的页面将不胜感激!
我的困境是如何最好地处理可以接受参数的长重循环.请考虑以下方法:
void HeavyLoop(byte* startingAddress, bool secondaryModification)
{
    for (int i = 0; i < 10000000; i++)
    {
        byte* b = startingAddress + i;
        *b+= 1;
        if (secondaryModification) *b+= 2;
    }
}
这个方法会做我想要的,但是我if在循环中使用了10000000个不必要的s.
我是否写过这样的方法:
void HeavyLoop(byte* startingAddress, bool secondaryModification)
{
    if (secondaryModification)
    {
        for (int i = 0; i < 10000000; i++)
        {
            byte* b = startingAddress + i;
            *b+= 1;
            *b+= 2;
        }
    }
    else
    {
        for (int i = 0; i < 10000000; i++)
        {
            byte* b …