c++ - 定义类型的宏

标签 c++ c++11 build

在 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/

相关文章:

c++ - C++ 11 多线程中 lock_guard 的意外行为

java - 应该玩 2 xx 应用程序同时具有 build.sbt 和 build.scala

c# - 传入字典的模型项的类型为 ‘mvc.Models.ModelA’,但该字典需要一个类型为“mvc.Models.ModelB”的模型项

c++ - clang 根据其重载之一拒绝带有尾随 decltype 返回类型的模板调用是否正确?

c++ - 使用C++的新标准

r - 如何确定我的 R 安装正在使用哪些矩阵库?

c++ - 用 boost::function 定义 boost 信号?

c++ - 在链表中遍历后如何获得列表的头部?

用于检查类是否具有运算符/成员的 C++ 类型特征

c++ - 在宏之后恢复访问修饰符