gpt4 book ai didi

C++ — 模板与基于 typedef 的类层次结构

转载 作者:太空狗 更新时间:2023-10-29 20:16:38 25 4
gpt4 key购买 nike

我正在编写一个用于高效数字处理的库。我必须支持不同类型的数字 — doublecomplex,甚至可能是 custom_matrix。出于性能原因,我决定为每种数字编译单独的库文件,以便编译器可以对算术运算和函数调用进行积极的优化。现在我有两个选择——要么编写带有参数 number_type 的模板类,例如

template <typename valueType>
class Worker {
valueType process(valueType value);
};

或项目范围的头文件中的typedef number kind,例如

in 'project.hpp':

namespace myProject {
typedef double valueType;
}

in 'worker.hpp':

#include "project.hpp"

namespace myProject {
class Worker {
valueType process(valueType value);
};
}

就我个人而言,我不能接受任何一种方式:基于模板的代码让我疯狂地使用大量冗余的 templatetypename 关键字,同时基于 typedef 的代码不能不能在单个库文件中编译(由于重名导致链接失败),所以我不能在一个程序中使用不同的数字类型。

所以问题是:我错过了什么吗?是否有更好/更清洁的方法来完成我的任务?

编辑:我必须同时在一个应用程序中使用doublecomplex 代码。

EDIT2:好的,说清楚一点:我正在为 iOS 应用程序开发一个算术表达式解析引擎。因此,我仅限于 C/C++/Objective-C,性能至关重要。

另外,我觉得在一般情况下使用模板很舒服。在我的情况下,我所有的源文件都充满了尖括号和 template/typename 关键字。这很烦人,让我无法写出重要的东西。

我想我会使用模板,因为据我所知没有更好的解决方案。

最佳答案

C++ 人员会告诉您使用模板,而不会问您的代码实际上将如何使用。

这里的关键问题是:您的图书馆是否会同时使用两种不同的数字类型?

如果答案是否定的,那么模板将是一个糟糕的选择。如您所知,使用模板并不容易:它们为您带来更多工作,为编译器带来更多工作,为 IDE(试图解析它们以提供自动完成功能)带来更多工作。

只需使用全局 typedef。从长远来看,您将为自己省去很多麻烦。顺便说一下,this is exactly what the Bullet physics library does .

关于C++ — 模板与基于 typedef 的类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012496/

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