编译时检查同一作用域中只有一个类的实例被实例化

问题描述 投票:0回答:1

我有一个来自外部图书馆的课程。同一范围内只能存在一个实例。我可以

assert(instance_counter<=1)
在包装类中没有问题。

但我想在编译时确定。有什么办法可以做到这一点吗?我认为不是,但也许在 c++23 或 c++26 中?

更新代码是这样的,没有人会在函数调用引入的嵌套作用域中实例化这样的类,尽管理论上这是可能的。因此,嵌套作用域并不是潜在解决方案需要解决的问题。

UPDATE2 单例是行不通的。我确实需要调用构造函数和析构函数来实现一些 RAII 操作。

c++ reflection static-assert c++23 c++26
1个回答
0
投票

我认为标准(从 c++26 开始)中没有或不会有任何内容允许您在编译时执行此操作。剩下的选择很少:

  • 在全局或 tls 计数器上断言(当然是在运行时)
  • 使用外部工具
  • 检测编译器链接器

前者琐碎高效;第二个取决于您可能使用的内容,后者要困难许多数量级......

© www.soinside.com 2019 - 2024. All rights reserved.