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类成为模板(它很庞大并且包含大量逻辑,因此我不想将所有这些都放入头文件中).
这个问题有其他解决方案吗?有几个"后端"在运行时切换似乎很常见,但我找不到一个可以接受的方法来实现这个...
一种可能的方法是让方法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)