1

假设有一个类Foo,作为库的设计者,我不希望我的用户能够实例化n多次(n不一定1)。有没有办法在编译期间强制执行此规则?

请注意,我不是在追求单例模式或类似的模式,因为我希望用户在执行他们的代码之前意识到他们不应该实例化该类。

到目前为止,我最好的尝试是static_assert__COUNTER__宏的组合,但无济于事,因为它们似乎没有像我所期望的那样在函数或类内部进行评估。

constexpr int bar()
{
    static_assert( __COUNTER__ < 5, "You called this too many times!");
    return 0;
}
4

1 回答 1

2

不。即使撇开创建单个实例的单个函数可以被多次调用,或者实例化可能发生在循环或模板中的事实,没有什么可以阻止实例化在另一个翻译单元中发生。

于 2018-10-13T15:58:40.723 回答