私はあなたからデザインの提案をしたいと思います。
私は 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;
}
undefined reference
からアクセスしようとするとエラーが発生しますmain
。
ここでの問題は、ネストされた静的構造が 2 つあることだと思います。この種の設計に最適なソリューションは何でしょうか?
クラス内でアルゴリズムのパラメーターとして使用する値のコンテナーdouble
としてのみ機能するクラスをどのように実装しますか?int