【发布时间】:2020-07-07 19:38:19
【问题描述】:
我很好奇是否有可能在编译时确保在一个地方调用一个方法。
请注意,如果函数被多次调用(例如在一个循环中)是可以的 - 但不应在两个单独的循环中调用它。
这可以分为两部分,我也对涵盖任一部分的解决方案感兴趣:
(a) 确保至少在一个地方调用方法
(b) 确保一个方法最多在一个地方被调用
我可以完全控制代码的结构,欢迎使用不同的成语来实现相同的想法。
// class.h
class MyClass {
public:
void my_method();
}
以下内容不应编译(从不调用)
#include "class.h"
int main() {
MyClass my_class;
}
以下内容不应编译(在多个地方调用)
#include "class.h"
int main() {
MyClass my_class;
my_class.my_method();
while(true) {
my_class.my_method();
}
}
以下内容应该编译(只在一个地方调用):
#include "class.h"
int main() {
MyClass my_class;
while(true) {
my_class.my_method();
}
}
【问题讨论】:
-
不要让它成为一种方法。将代码内联放在那个地方。
-
我认为您也可以使用 lambda(它可能是一个空的 lambda)来执行此操作,因为每个 lambda 的闭包类型都是唯一的。同样,这将是一个运行时错误,但这不是您所要求的。如果您提供有关您要解决的问题的更多详细信息,那么我们或许能够找到解决此问题的方法。
-
您可以使用非标准的
__COUNTER__宏来执行此操作。像static_assert(__COUNTER__ == 0); my_class.my_method();这样的东西。但是,计数器会在每个翻译单元中重置,因此您只能检查每个翻译单元是否调用了该函数。 -
你为什么要这样做?函数的部分意义在于它可以从多个地方调用。
-
你应该解释为什么你想这样做。也许您要求的解决方案不是实现您真正目标的最佳解决方案。
标签: c++