C++ 在C+;中将函数模板作为函数参数传递+;

C++ 在C+;中将函数模板作为函数参数传递+;,c++,C++,假设我有一个模板函数,它将整数作为模板参数,如下所示: template <int i> void f(int x) {...} 我搜索过谷歌,但似乎所有相关的问题都是通过一个标准函数作为模板参数传递的,这里不是这样。希望有人能帮助我。多谢各位 您可以使用可调用类来模拟: template <int i> struct f { void operator()(int x) { // ... } }; template <template <

假设我有一个模板函数,它将整数作为模板参数,如下所示:

template <int i> void f(int x) {...}

我搜索过谷歌,但似乎所有相关的问题都是通过一个标准函数作为模板参数传递的,这里不是这样。希望有人能帮助我。多谢各位

您可以使用可调用类来模拟:

template <int i>
struct f {
  void operator()(int x) {
    // ...
  }
};

template <template <int> typename T>
void g(int i, int x) {
  if (i == 0)
    T<0>{}(x);
  else if (i == 1)
    T<1>{}(x);
  //...
}

int main() { 
  g<f>(10, 12); 
}
模板
结构f{
void运算符()(int x){
// ...
}
};
模板
空g(整数i,整数x){
如果(i==0)
T{}(x);
else如果(i==1)
T{}(x);
//...
}
int main(){
g(10,12);
}

也可以对命名的静态方法执行相同的操作。但是我建议您将模板参数设置为常规参数,这样您就不需要这样的东西。

您可以使用可调用类来模拟它:

template <int i>
struct f {
  void operator()(int x) {
    // ...
  }
};

template <template <int> typename T>
void g(int i, int x) {
  if (i == 0)
    T<0>{}(x);
  else if (i == 1)
    T<1>{}(x);
  //...
}

int main() { 
  g<f>(10, 12); 
}
模板
结构f{
void运算符()(int x){
// ...
}
};
模板
空g(整数i,整数x){
如果(i==0)
T{}(x);
else如果(i==1)
T{}(x);
//...
}
int main(){
g(10,12);
}

也可以对命名的静态方法执行相同的操作。但是我建议您将模板参数设置为常规参数,这样您就不需要这样的东西。

您不能这样做。为什么不将模板参数设置为常规参数?不能将模板作为运行时参数传递。模板在编译时实例化。因为常数i可以使函数f更快。例如,假设f计算x的第I次方,当I=0、1或2时,我将重载函数f。模板是运行时无法传递的。如果要在
g
中实例化的模板是在编译时确定的,但不是作为参数传递的,是否可以?在某些时候,您需要将运行时值映射到编译时模板参数。也许你使
f
更快了,但是现在
g
需要分支你不能这样做。为什么不将模板参数设置为常规参数?不能将模板作为运行时参数传递。模板在编译时实例化。因为常数i可以使函数f更快。例如,假设f计算x的第I次方,当I=0、1或2时,我将重载函数f。模板是运行时无法传递的。如果要在
g
中实例化的模板是在编译时确定的,但不是作为参数传递的,是否可以?在某些时候,您需要将运行时值映射到编译时模板参数。也许您使
f
更快,但现在
g
需要分支