我正在尝试将 protobuf c++ 构建到 ios 中。但是它的实现包含一个 TYPE_BOOL 枚举变量,它与 ios 宏中的 TYPE_BOOL 冲突。并且编译失败。
如何解决这个问题?
我正在尝试将 protobuf c++ 构建到 ios 中。但是它的实现包含一个 TYPE_BOOL 枚举变量,它与 ios 宏中的 TYPE_BOOL 冲突。并且编译失败。
如何解决这个问题?
有一些合理(但很老套)的选项:
#include
在您使用任何 iOS 标头TYPE_BOOL
之前使用的任何 protobuf 标头。#include
例子:
#include <google/protobuf/descriptor.h>
#include <ConditionalMacros.h>
TYPE_BOOL
这使您可以在自己的代码中使用 iOS ,但不能使用 protobuf 的TYPE_BOOL
.
#include
iOS 标头,然后#undef TYPE_BOOL
是#include
protobuf 标头。例子:
#include <ConditionalMacros.h>
#undef TYPE_BOOL
#include <google/protobuf/descriptor.h>
TYPE_BOOL
这使您可以在自己的代码中使用 protobuf ,而不是 iOS 的TYPE_BOOL
.
如果您需要两个定义,这可能有效(未经测试):
#include <google/protobuf/descriptor.h>
// Make a copy of TYPE_BOOL before it is hidden by a macro.
const google::protobuf::FieldDescriptor::Type PROTOBUF_TYPE_BOOL =
google::protobuf::FieldDescriptor::TYPE_BOOL;
#include <ConditionalMacros.h>
现在PROTOBUF_TYPE_BOOL
在需要 Protobuf 定义时使用。
请注意,google/protobuf/descriptor.pb.h
它还定义了一个TYPE_BOOL
. 可以用同样的方法解决,但是大多数人不使用那个标题,所以我把它排除在例子之外。