用于定义类型的宏

Mac*_*Mac 0 c++ build c++11

在C++中有没有办法根据预处理器标志定义类型?我有两个版本的库,一个是本机的,一个是建立在thirft的顶部.

两个版本具有完全相同的函数签名,但返回和参数类型除外.本机版本传递对象的指针,而thirft版本使用i64来表示指针.

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

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

//thirft
i64 obj = fun(i64 another_obj)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有这样的构造:

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)
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 5

如果两个版本都能够使用相同的已知数据进行编译(因此您实际上没有AnotherType在不使用它的版本中定义,但只是具有不同的函数签名),那么您可以使用std::conditional:

using ActualType = std::conditional<IS_NATIVE, i64, AnotherType>::type;
Run Code Online (Sandbox Code Playgroud)

否则你必须坚持复古#if #else #endif宏.