【发布时间】:2018-05-09 22:02:41
【问题描述】:
我正在尝试在基于 C++ 的应用程序中管理初始化函数。我想:
确保
init_some_hw_peripherals()(见下文)只运行一次,即使init()被多次调用。如果未从对象调用另一个函数
init_some_hw_peripherals()previously,则阻止执行函数doPerform()。
我想到了以下解决方案,但它不起作用(如果未初始化,我不会收到任何错误消息)。我知道为什么它不起作用,而且非常有意义。但我想使用这些类型的定义来实现我提到的。我希望这些信息对您有所帮助。
如果您能帮助我处理这种情况并给我一些指导,我将不胜感激。
提前致谢。
初始化
void myClass::init(void)
{
#ifndef MY_INIT_
#define MY_INIT_
init_some_hw_peripherals();
#endif
}
应用程序
void myClass::perform (void)
{
#ifndef MY_INIT_
#error "You havent initialized. Use myClass::init()"
#else
doPerform();
#endif
}
编辑:对我来说使用私有变量的问题是我有几个类可以调用 init 函数。所以我不想让它成为一个私有变量。这就是为什么我坚持这种解决方案,因为我知道它最初不会起作用。
【问题讨论】:
-
您的#ifdef 将无助于防止多次执行 init_some_hw_peripherals()。在程序编译之前而不是在运行时进行评估。
-
#defines 和#ifndefs 确实知道“函数”的概念。为什么private变量不能用于此目的? -
如果您能帮助我处理这种情况并给我一些指导,我将不胜感激。使用布尔变量。在构造函数中将其设置为 false。当调用 init_some_hw_peripherals() 时,将其设置为 true。执行 perform() 时检查是否为真
标签: c++ initialization preprocessor assertions