首页 > 解决方案 > c ++重新初始化静态常量成员

问题描述

我有一个班级Worker和另一个班级A有一个static const私人成员,如

class Worker {
    enum class IMPL {
          LAZY   = 1,
          ACTIVE = 2,
          CRAZY  = 4,
          ...      // omitted for brevity
    };
    Worker(IMPL impl); 
    ...           // omitted for brevity
};

class A {
   private:
     static const Worker worker;
     ...          // omitted for brevity
 };

的值worker在一个翻译单元中只设置一次,它既不需要跨实例A(因此是static关键字)也不需要在程序期间(因此是关键字)更改const。例如,它设置为

//somefile.cpp
const auto A::worker = Worker{LAZY};

然而,它们有不同的可能值,worker为它们编写基准测试单元正在成为一个问题。我想A用不同的工作人员对类的所有实现进行基准测试。我可以为 enum 中的每个元素编写一个基准测试单元,它使用适当的值IMPL初始化,然后运行。但是我需要编写一个不同的翻译单元,其中包含这个初始化和. 有没有办法可以避免这种情况?Aworkermain()IMPL

我不想在worker其中添加变量,A因为这是性能关键代码,并且会带来线程安全问题。

标签: c++

解决方案


推荐阅读