在C++中使用性能关键方法调用多态的最快方法?

yes*_*int 1 c++ polymorphism performance

我有以下问题.A类有一组方法compute1(),compute2(),compute3()......每个方法都有深度嵌套的循环,其中调用了一些性能关键的方法.根据运行时条件,此方法应为func1()或func2():

class A {
public:
   void compute1(){
       for(i...)
         for(j...)
           for(k...)
             // call func1(i,j,k) or func2(i,j,k)
   }

   void compute2(){
       for(i...)
         for(j...)
           for(k...)
             // call func1(i,j,k) or func2(i,j,k)
   }
   ....
}
Run Code Online (Sandbox Code Playgroud)

对func()的调用是如此性能至关重要,以至于func中的if语句都是可接受的.compute()方法的数量很大,因此为每个func创建单独的方法也不是一种选择.由于性能原因,使func()虚拟也不起作用.由于设计原因,我不想让A类成为模板(它很庞大并且包含大量逻辑,因此我不想将所有这些都放入头文件中).

这个问题有其他解决方案吗?有几个"后端"在运行时切换似乎很常见,但我找不到一个可以接受的方法来实现这个...

piw*_*iwi 6

一种可能的方法是让方法compute1()等使用模板本身.该模板仅用于选择要调用的适当内部函数.例如 :

template <typename FuncTrait>
void A::compute1(FuncTrait trait)
{
    for (...)
      choose_func(trait);
}

struct trait_1 {};

template <>
void choose_func<trait_1>(trait_1)
{
    func1();
}
Run Code Online (Sandbox Code Playgroud)

一种可能的调用方式compute1():

a.compute1(trait_1());
Run Code Online (Sandbox Code Playgroud)