【发布时间】:2020-12-21 21:46:25
【问题描述】:
在 C++ 中有没有办法设计一个函数/向它添加一些“属性”,这样在代码中多次调用它会引发编译时错误?
提供一点背景/动机:我在 Mbed-OS 上编程,我犯了几个看起来像这样的错误:
rtos::Thread thread;
[lots of code]
thread.start(persistent_function_1);
[lots of code in a setup function]
thread.start(persistent_function_2);
这具有(逻辑)结果,应该允许在程序的生命周期内执行的persistent_function_1 只能在线程被重新用于运行persistent_function_2 之前执行。我花了很长时间才找到这个错误,我想知道是否可以对我的thread.start 函数做一些事情,以确保如果我再次犯这种错误,我会得到一个编译器错误。
【问题讨论】:
-
必须有一种方法可以将
thread.start包装在一个模板中,该模板设置一个布尔值或计数器并在静态断言中测试该布尔值。当然,有些雅虎会在没有模板的情况下调用thread.start,你也好不到哪里去。 -
是的,这已经是一个不错的改进了。我同意这仍然可能失败,但代码库中可能有“不应使用裸线程声明”的政策。
标签: c++ compile-time error-checking