假设有一个类Foo
,作为库的设计者,我不希望我的用户能够实例化超过n
次(其中n
不一定是1
(。 有没有办法在编译期间强制执行此规则?
请注意,我不是在追求单例或类似的模式,因为我希望用户在执行代码之前意识到他们不应该实例化类。
到目前为止,我最好的尝试是将static_assert
和__COUNTER__
宏组合在一起,但无济于事,因为它们似乎没有像我预期的那样在函数或类中被评估。
constexpr int bar()
{
static_assert( __COUNTER__ < 5, "You called this too many times!");
return 0;
}
No. 即使撇开单个实例的单个函数可以被多次调用,或者实例化可以在循环或模板中发生的事实,没有什么可以阻止实例化在另一个翻译单元中发生。