使用模板在c ++中核心类型不同的不同项目中使用通用代码

时间:2019-04-02 18:44:51

标签: c++ templates embedded

我正在研究几个包含通用代码的项目。这些项目使用不同的内核运行,但有以下差异:

typedef long long i64;
// typedef unsigned long long u64; // In project A
// typedef unsigned long u64;      // In project B
typedef int i32;
typedef unsigned int u32;
typedef short i16;
typedef unsigned short u16;
typedef char i8;
typedef unsigned char u8;
typedef void* Data;
// typedef u32 ptr;                // 32b pointer in project A
// typedef u64 ptr;                // 64b pointer in project B

但是,当然,我希望将来以不同的配置来支持新内核。

我不是OOO专家,所以我看到以下解决方法:

1)创建“ ProjDefs.h”的2个副本,并将其从项目的任何位置包括在内(在项目A中,“ ProjDefs.h”的内容将与项目B的内容不同)。我相信这是一种错误的方式(但这就是我部门的每个人都在做的事情。)

2)让每个类都从“ Object.h”继承,这将强制执行这些特定类型并具有以下代码:

template <typename Core>
class EV_Object{
    typename Core::I64 I64;
    typename Core::U64 U64;
    typename Core::I64 I32;
    typename Core::I64 U32;
    typename Core::I64 I16;
    typename Core::I64 U16;
    typename Core::I64 I8;
    typename Core::I64 U8;
    typename Core::Ptr Ptr;
};

让每个类都继承自它,从而接收正确的类型定义。 问题是:

A)每个类都需要从其继承。

B)因为这是模板,所以我将无法使用源文件(仅标头)。

再次,我距离C ++专家还很远,但这也感觉不正确。

有什么建议吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

您绝对应该做的是删除“本地车库标准”类型,而改用<ion-header> <ion-tabs style="display: contents;"> <ion-tab-bar slot="top"> <ion-tab-button tab="home"> <ion-router-outlet name="one"></ion-router-outlet> <ion-label>Am besten bewertet</ion-label> <ion-icon name="heart"></ion-icon> <ion-badge>6</ion-badge> </ion-tab-button> <ion-tab-button tab="settings"> <ion-router-outlet name="one"></ion-router-outlet> <ion-label>Trends</ion-label> <ion-icon name="ice-cream"></ion-icon> </ion-tab-button> <ion-tab-button tab="new"> <ion-router-outlet name="one"></ion-router-outlet> <ion-label>Neueste</ion-label> <ion-icon name="clock"></ion-icon> </ion-tab-button> </ion-tab-bar> </ion-tabs> </ion-header> 。期。

是的,您需要更改整个程序-首先要怪罪那些决定自己制定类型标准的人。

至于指针,无论如何都不应将其隐藏在typedef后面。如果指针本身的大小很重要,那就是代码的味道。对于非常罕见的指针大小很重要的情况,请使用stdint.h而不是依赖于typedef。