[英]Use both { and #if in a C/C++ macro
我需要编写一个大型类,希望能够在Visual Studio中进行编辑并针对Windows进行编译以进行测试,但最终整个应用程序都将Android作为目标。
所涉及的类仅具有Android特定的代码(它将是gpg C ++ SDK的接口)。 由于一系列的复杂性,我基本上不得不自己动手做,并用诸如此类的内容包围每个函数的内容
GooglePlayManager::GooglePlayManager()
{
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
//code
#endif
}
因为否则它将无法为Windows编译。 理想情况下,我只想在一个.cpp文件中定义这样的内容
#define BEGIN_ANDRO { #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
#define END_ANDRO #endif }
但我无法正常工作。 有没有办法做到这一点,还是我可以考虑的一个不错的选择?
预处理器指令不能出现在宏中,但是如何执行以下操作:
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
# define FOO(...) __VA_ARGS__
#else
# define FOO(...) {}
#endif
GooglePlayManager::GooglePlayManager() FOO({
// ...
})
在我看来,您这里有一个体系结构问题,您正在尝试使用宏解决。
您的GooglePlayManager
似乎有两种不同的实现,一种用于Android,另一种(可能为空?),用于Windows。
因此,代码应反映出这一点。 定义一个公共接口,并为Windows和Android提供该接口的不同实现。
您可能会发现空的Windows实现可能会形成可以在单元测试中使用的有用的Mock或Stub对象 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.