加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:40:04 所属栏目:百科 来源:网络整理
导读:我正在编写一个库来进行有效的数字处理.我必须支持不同类型的数字 – 双,复,甚至custom_matrix.出于性能原因,我决定为每种数字类型编译单独的库文件,以便编译器可以对算术运算和函数调用使用积极的优化.现在我有两个选择 – 要么编写带参数number_type的模板
我正在编写一个库来进行有效的数字处理.我必须支持不同类型的数字 – 双,复,甚至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版本相同的效果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读