在 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,您可以在单元测试中使用它。
我需要编写一个大型 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,您可以在单元测试中使用它。