【发布时间】:2012-07-03 15:52:25
【问题描述】:
我想听听你的设计建议。
我有一组 C++ 类,每个类都有一堆变量(double 和 int),这些变量决定了它们实现的算法的行为。
类似这样的:
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;
};
然后在Foo 和Bar 类中我使用值Options::FooOptions::option1 等等。
这里的问题是我无法静态初始化这些值。 我习惯在 .cpp 文件之外初始化静态成员,但在我的 .cpp 中
// Options.cpp
Options::FooOptions::option1 = 1.0;
我得到以下编译器
error: error: expected constructor, destructor, or type conversion before ‘=’ token
另一方面,如果我在构造函数中初始化它们:
// Options.cpp
Options::Options()
{
FooOptions::option1=1.0;
}
当我尝试从我的main 访问它时收到undefined reference 错误。
我认为这里的问题是我有两个嵌套的静态结构。这种设计的最佳解决方案是什么?
您将如何实现一个仅充当 double 和 int 值容器的类,以在类内部用作算法的参数?
【问题讨论】:
-
你忘记了定义中的类型:
double Options::FooOptions::option1 = 1.0; -
噢!我损失了一个小时!!!谢谢!
-
您是否有理由需要将所有类的选项组合到一个
Options类中?不应该每个班级都有自己的一组选项吗? -
我想使用静态类嵌入和管理所有类选项,该类可以在程序期间通过一些滑块进行简单修改(这涉及项目的 Qt 部分)。这样做有助于我将所有重要变量保留在一个类中,而不会丢失或忘记。
标签: c++ static initialization options