在不产生动态查找成本的情况下,为代码提供通用接口的好方法是什么?

Jam*_*tta 4 c++ polymorphism function-pointers

我正在编写一些处理数据的代码.用户可以选择许多处理函数组,然后将这些处理函数应用于数据集.我想在不同的地方实现所有这些组,但由于它们都采用相同的参数并且所有类似的事情我希望它们具有共同的接口.

作为一个优秀的小型c ++程序员,我首先想到的是简单地使用多态.只需使用所需的接口创建一些抽象类,然后从中派生每组处理对象.当我想到另一个皱纹时,我的希望很快就破灭了.这些数据集是巨大的,导致所讨论的函数被称为数十亿次.虽然动态查找相当便宜,但据我所知,它比标准函数调用慢得多.

我目前解决这个问题的想法是使用函数指针,方式如下:

void dataProcessFunc1(mpz_class &input){...}
void dataProcessFunc2(mpz_class &input){...}
...
class DataProcessInterface
{
    ...
    void (*func1)(mpz_class);
    void (*func2)(mpz_class);
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用某种构造函数或某些东西来设置指向正确事物的指针.

所以我想我的问题是:这是一个好方法吗?还有另外一种方法吗?或者我应该学会停止担心并喜欢动态查找?

Jer*_*fin 7

虚函数调用通过指针调用的函数.开销通常与通过指针的显式函数调用大致相同.换句话说,你的想法可能会获得很少(很可能根本没有).

我的立即反应是从虚拟功能开始,只有在探查器显示虚拟呼叫的开销变得显着时才会担心其他问题.

当/如果发生这种情况,另一种可能性是在类模板中定义接口,然后将该接口的各种实现放入模板的特化中.这通常会消除所有运行时开销(尽管通常需要额外的工作量).