c++ - 类内部定义的静态结构的静态成员的编译时默认值

标签 c++ static initialization

我想听听您的设计建议。

我有一组 C++ 类,每个类都有一堆变量(doubleint),它们决定了它们实现的算法的行为。

像这样:

class Foo
{
  private:
  double value1, value2, etc...;
  public: 
  void setOptions(double val1, double val2);
  /*
  and here other methods...
  */
};

class Bar
{
  private:
  double value1, value2, etc...;
  public: 
  void setOptions(double val1, double val2);
  /*
  and here other methods...
  */
};

我想将所有这些选项变量分组到一个类中,这样就可以动态更改类实例中选项的变量,但我也想给出 value变量一个默认值作为初始化。

我希望每个类的选项变量都不同,并在编译时设置默认值。

我采用了以下方法:

// Options.h
class Options
{
    public:
    Options();

    static struct FooOptions
    {
      static double option1;
      static double option2;
    } fooOptions;

    static struct BarOptions
    {
      static double option1;
      static double option2;
        // etcetera
    } barOptions;  
};

然后在 FooBar 类中,我使用值 Options::FooOptions::option1 等等。

这里的问题是我无法静态初始化这些值。 我习惯于在 .cpp 文件之外初始化静态成员,但在我的 .cpp 中

// Options.cpp
Options::FooOptions::option1 = 1.0;

我得到以下编译器 error: error: expected constructor, destructor, or type conversion before ‘=’ 标记

另一方面,如果我在构造函数中初始化它们:

// Options.cpp
Options::Options()
{
    FooOptions::option1=1.0;
}

当我尝试从我的 main 访问它时,我得到了 undefined reference 错误。

我认为这里的问题是我有两个嵌套的静态结构。这种设计的最佳解决方案是什么?

您将如何实现一个仅充当 doubleint 值容器的类,以在类内部用作算法参数?

最佳答案

// Options.cpp
Options::FooOptions::option1 = 1.0;

添加缺失的“double”:-)

double Options::FooOptions::option1 = 1.0;

应该这样做。

关于c++ - 类内部定义的静态结构的静态成员的编译时默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307125/

相关文章:

c++ - 模板化模式对象和外部密码对象有什么区别?

java - 类中静态 block 和静态变量的执行顺序是什么?

c++ - 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?

java - 在 java 中,System.out.println 方法如何在静态和非静态上下文中工作?

java - 我可以将字符串作为参数添加到传统的 for 循环中吗?

c - struct '... makes pointer from integer without a cast' 初始化期间的警告

c++ - 使用 Xcode 和 libc++ 时与 AutoSeededRandomPool 链接错误

c++ - 如何确保可变元组中的类型相同?

c++ - boost::spirit 中的类与结构

c# - 如果静态只读成员调用静态方法获取值,是否同步完成?