C – 模板与基于typedef的类层次结构
我正在编写一个库来进行有效的数字处理.我必须支持不同类型的数字 – 双,复,甚至custom_matrix.出于性能原因,我决定为每种数字类型编译单独的库文件,以便编译器可以对算术运算和函数调用使用积极的优化.现在我有两个选择 – 要么编写带参数number_type的模板类,例如
template <typename valueType> class Worker { valueType process(valueType value); }; 或者在项目范围的头文件中键入def number kind,例如 in 'project.hpp': namespace myProject { typedef double valueType; } in 'worker.hpp': #include "project.hpp" namespace myProject { class Worker { valueType process(valueType value); }; } 我个人不能接受任何一种方式:基于模板的代码使我厌倦了大量的冗余模板和typename关键字,同时基于typedef的代码无法在单个库文件中编译(链接因名称重复而失败),所以我不能在一个程序中使用不同的数字类型. 所以问题是:我错过了什么吗?有没有更好/更清洁的方式来完成我的任务? 编辑:我必须在一个应用程序中同时使用双重和复杂的代码. EDIT2:好的,为了清楚起见:我正在为iOS应用程序开发一个算术表达式解析引擎.因此,我仅限于C/C++ / Objective-C,而且性能至关重要. 此外,我觉得在常见情况下使用模板很舒服.在我的情况下,我的所有源文件都包含尖括号和模板/ typename关键字.这简直令人烦恼,并且让我分心于编写重要的东西. 我想我会使用模板,因为就我所见,没有更好的解决方案. 解决方法
您应该使用模板.如果您坚持在编译时而不是在运行时执行绝对最大工作量,并且您选择的语言是C,那么您将使用模板编程.
这是一个混乱的小于和大于标志,令人困惑的错误消息和typename关键字(当你不想在标题中定义你的整个类时,不要让我开始显式实例化),但它是我们得到的烂摊子. 编辑:有第三个选项,以预处理的形式 – 您可以通过预处理器运行相同的代码两次,每次将符号放在不同的命名空间中,以获得与没有符号冲突的typedef版本相同的效果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |