2

我有一个我只想在文件范围内调用的宏。如果在函数中使用它可以以某种方式(在编译时或运行时)抱怨,那就太好了。这可能吗?

编辑:到目前为止回复评论:我有在我的代码库中重复使用的静态对象。我创建了宏来更快地创建这些对象,因为这些对象在所有地方都使用,以至于节省击键对于生产力/烦恼很重要。

到目前为止,我一直在函数中将这些对象创建为静态对象。最近发现这不是线程安全的。我决定将所有这些对象移出函数,以便在程序启动时创建它们而不是懒惰地创建它们。我只是认为有一个故障保险可以防止这个错误在未来再次出现。

需要明确的是,这根本不会阻碍进展。如果它很容易/可能的话,这只是我认为对宏的一个很好的补充。

4

1 回答 1

4

您正在寻找的是一个在文件级别但不在函数级别工作的构造。在我的脑海中,命名空间应该符合要求。

#define FOO(x) namespace { x }

FOO(int bar = 42;) // Compiles

void f() {
    FOO(int bar = 42;) // Doesn't compile
}

由于我不确切知道您要包装什么,因此我使此宏尽可能简单。任何实际的实现都应该使用标准的宏创建技巧来确保它是好的和安全的。

请注意,匿名命名空间将使在其中创建的每个对象仅对当前编译单元可见。在您的情况下,这应该不是问题,因为您的对象曾经在函数级别声明,因此在当前编译单元之外不可见。

于 2012-07-29T04:26:19.160 回答