C ++检测是否声明了全局变量

问题描述 投票:5回答:1

是否可以使用SFINAE,如boost的has_member或其他C ++标准兼容方法来检查特定变量是否在全局范围内声明? 这意味着不事先声明宏来检查这个或使用编译器特定的添加,如MSVC的__if_exists。像弱符号声明这样的GCC也是没有选择的。

使用C ++ 11或更早版本的解决方案对我来说是完美的。其他解决方案也欢迎。

P.S。:可以假设变量的类型是已知的。

背景: 我目前正试图以通用的方式定位许多不同的Arduino平台。我知道特殊的引脚被声明为static const uint8_t但我不知道是否例如SDA1或只是SDA被宣布。为了支持更新的目标而不编写新的板定义,每次我想检查给定的一组可能的引脚并支持那些声明。这应该与Arduino IDE开箱即用,因此不应使用编译器特定功能,额外程序或其他花哨的添加。我知道,对于大多数这些变量,还有一个声明的宏,表示存在的那些。然而,在我看来,更清晰的解决方案是直接检查是否声明了pin变量,因为宏名称往往是特定于目标的,而pin变量名称和声明看起来非常稳定。当然,正确的解决方案是命名约定和宏定义来支持这种检查。然而,将想法推向所有Arduino核心项目的努力对我来说太过分了。

P.P.S:请不要只是投票或评论这是一个xy问题。我的例子只是其中之一。任何其他API,如多库目标项目也可以使用这样的解决方案。即使是明确的“不,那是不可能的”,至少可以节省大量时间来寻找这样的解决方案。

c++
1个回答
2
投票

我认为您可以使用构建步骤来解决此问题,例如尝试使用相关全局变量编译代码的configure脚本。然后,它可以确定构建是否失败或成功,并定义适当的makros来处理代码中的相关案例。

© www.soinside.com 2019 - 2024. All rights reserved.