gpt4 book ai didi

c++ - 在不产生动态查找成本的情况下拥有通用代码接口(interface)的好方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:48 25 4
gpt4 key购买 nike

我正在编写一些处理数据的代码。有许多组处理函数可供用户选择,然后应用于数据集。我想在不同的地方实现所有这些组,但由于它们都采用相同的参数并且都做类似的事情,我希望它们有一个通用的接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com