假设有一个类Foo
,我作为图书馆的设计师,不希望我的用户实例化的次数超过n
的次数(其中n
不一定是1
)。
有什么方法可以在编译期间执行该规则?
请注意,我不遵循Singleton或类似模式,因为我希望用户意识到他们不应该在执行代码之前 实例化该类。
到目前为止,我的最佳尝试是将static_assert
和__COUNTER__
宏组合在一起,但由于没有像我期望的那样似乎没有在函数或类中进行评估而无济于事。
constexpr int bar()
{
static_assert( __COUNTER__ < 5, "You called this too many times!");
return 0;
}
答案 0 :(得分:2)
不。即使撇开单个函数创建单个实例的事实,也可以多次调用该实例,或者实例化可以在循环或模板中进行的事实,没有什么可以阻止实例化在另一个 translation unit 中发生。>