当前位置:  开发笔记 > 编程语言 > 正文

用于定义类型的宏

如何解决《用于定义类型的宏》经验,为你挑选了1个好方法。

在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宏.



1> Jack..:

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

using ActualType = std::conditional::type;

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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有