在 C/C++ 宏中同时使用 { 和 #if

Use both { and #if in a C/C++ macro

我需要编写一个大型 class,我希望能够在 Visual Studio 中进行编辑并为 Windows 进行编译以进行测试,但整个应用程序的目标是 Android最后。

有问题的 class 将只有 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 or Stub object,您可以在单元测试中使用它。