我需要编写一个大型类,我希望能够在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 }
但我无法让它发挥作用。有没有办法让这种情况发生,或者我可以考虑一个不错的替代方案?
答案 0 :(得分:3)
预处理程序指令不能出现在宏中,但如下所示:
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
# define FOO(...) __VA_ARGS__
#else
# define FOO(...) {}
#endif
GooglePlayManager::GooglePlayManager() FOO({
// ...
})
答案 1 :(得分:2)
在我看来,你有一个架构问题,你试图用宏来解决。
看起来你的GooglePlayManager
有两种不同的实现方式,一种用于Android,另一种用于Windows(可能为空?)。
所以代码应该反映出来。定义一个通用接口,并为Windows和Android提供该接口的不同实现。
您可能会发现空的Windows实现可能会形成一个可用于单元测试的有用Mock or Stub object。