在 C++ 中有没有一种方法可以根据预处理器标志定义类型?我有两个版本的库,一个是 native 的,一个是构建在 thirft 之上的.
这两个版本具有完全相同的函数签名,除了返回和参数类型。 native 版本传递对象的指针,而 thirft 版本使用 i64 来表示指针。
我想知道是否有一种方法可以构建一个项目,该项目将使用基于编译标志的任何库。例如:
//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)
最佳答案
如果两个版本都能够使用相同的已知数据进行编译(所以您实际上并没有在不使用它的版本中定义 AnotherType
,只是具有不同的函数签名)那么您可以使用std::conditional
:
using ActualType = std::conditional<IS_NATIVE, i64, AnotherType>::type;
否则你必须坚持使用复古的 #if#else #endif
宏。
关于c++ - 定义类型的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326325/