繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM