在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)
如果两个版本都能够使用相同的已知数据进行编译(因此您实际上没有AnotherType在不使用它的版本中定义,但只是具有不同的函数签名),那么您可以使用std::conditional:
using ActualType = std::conditional<IS_NATIVE, i64, AnotherType>::type;
Run Code Online (Sandbox Code Playgroud)
否则你必须坚持复古#if #else #endif宏.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |