在C++中有没有办法根据预处理器标志定义类型?我有两个版本的库,一个是本机的,一个是建立在thirft的顶部.
两个版本具有完全相同的函数签名,但返回和参数类型除外.本机版本传递对象的指针,而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)
Jack.. 5
如果两个版本都能够使用相同的已知数据进行编译(因此您实际上没有AnotherType
在不使用它的版本中定义,但只是具有不同的函数签名),那么您可以使用std::conditional
:
using ActualType = std::conditional::type;
否则你必须坚持复古#if #else #endif
宏.
如果两个版本都能够使用相同的已知数据进行编译(因此您实际上没有AnotherType
在不使用它的版本中定义,但只是具有不同的函数签名),那么您可以使用std::conditional
:
using ActualType = std::conditional::type;
否则你必须坚持复古#if #else #endif
宏.