宏来定义类型 在C++中有一种方法可以基于预处理器标志定义一个类型吗?我有两个版本的库,一个是本机版本,另一个是构建在

宏来定义类型 在C++中有一种方法可以基于预处理器标志定义一个类型吗?我有两个版本的库,一个是本机版本,另一个是构建在,c++,c++11,build,C++,C++11,Build,除了返回和参数类型之外,这两个版本都有完全相同的函数签名。本机版本传递对象的指针,而第三个版本使用i64表示指针 我想知道be是否有办法构建一个基于编译标志使用任何库的项目。例如: //native AType* obj = fun(AnotherType* another_obj) //thirft i64 obj = fun(i64 another_obj) 我想知道是否有这样的结构: if native X is Atype* Y is AnotherType* els

除了返回和参数类型之外,这两个版本都有完全相同的函数签名。本机版本传递对象的指针,而第三个版本使用i64表示指针

我想知道be是否有办法构建一个基于编译标志使用任何库的项目。例如:

//native
AType* obj = fun(AnotherType* another_obj)

//thirft
i64 obj = fun(i64 another_obj)
我想知道是否有这样的结构:

if native
    X is Atype*
    Y is AnotherType*
else
    X is i64
    Y is i64
end

//native
X obj = fun(Y another_obj)

//thirft
X obj = fun(Y another_obj)

你想要的是:

#ifdef native
    typedef Atype* X
    typedef AnotherType* Y
#else
    typedef i64 X
    typedef i64 Y
#endif

如果本机始终设置为非零值或零值,则可以改用If native。

如果两个版本都能够使用相同的已知数据进行编译,因此您实际上没有在版本中定义不使用它的其他类型,而只是具有不同的函数签名,则可以使用:

否则,您必须坚持使用retro if else endif宏

using ActualType = std::conditional<IS_NATIVE, i64, AnotherType>::type;