我正在编写一些处理数据的代码。有许多组处理函数可供用户选择,然后应用于数据集。我想在不同的地方实现所有这些组,但由于它们都采用相同的参数并且都做类似的事情,我希望它们有一个通用的接口(interface)。
作为一名出色的 C++ 小程序员,我的第一个想法是简单地使用多态性。只需创建一些具有所需接口(interface)的抽象类,然后从中派生出每组处理对象。然而,当我想到另一个皱纹时,我的希望很快就破灭了。这些数据集非常庞大,导致相关函数被调用了数十亿次。虽然动态查找相当便宜,但据我所知,它比标准函数调用慢很多。
我目前的想法是使用函数指针,以类似这样的方式:
void dataProcessFunc1(mpz_class &input){...}
void dataProcessFunc2(mpz_class &input){...}
...
class DataProcessInterface
{
...
void (*func1)(mpz_class);
void (*func2)(mpz_class);
...
}
使用某种构造函数或其他东西来设置指针以指向正确的东西。
所以我想我的问题是:这是一个好方法吗?还有别的办法吗?还是我应该学会停止担心并热爱动态查找?
最佳答案
虚函数调用是通过指针的函数调用。开销通常与通过指针的显式函数调用大致相同。换句话说,您的想法可能收获很少(很可能什么都没有)。
我的直接 react 是从虚函数开始,只有当/如果分析器显示虚调用的开销变得显着时才担心其他事情。
当/如果发生这种情况,另一种可能性是在类模板中定义接口(interface),然后将该接口(interface)的各种实现放入模板的特化中。这通常会消除所有运行时开销(尽管这通常是相当多的额外工作)。
关于c++ - 在不产生动态查找成本的情况下拥有通用代码接口(interface)的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218798/