私にはわからない作業コードがあります。モックアップされたバージョンについては下記を参照してください。それのJISTは私がFoo
のインスタンスを持っているFoo
クラス、ChildFoo
クラスとBar
クラスを持っています。 Foo
は、Bar
にいくつかのキーを提示し、json辞書を解析します。 Bar
は汎用であり、複数の方法で使用され、Foo
は実装ごとにサブクラス化されています。 子クラスのpublic static constメンバーをオーバーライドします
Bar
メソッドが値を解析だけで特定のキーの代わりに独自の名前を使用するために、その場合には
""
に
Foo
で
public static const std::string
、デフォルト値を持っています。私はを
ChildFoo
に置き換えます。なぜなら、json辞書はより複雑で、
{value: [], type:[], ...}
を提供するからです。他の実装はちょうど
{mName: []}
を返します。
foo.hという:
class Foo
{
public:
static const std::string PARAM_VALUE;
}
Foo.cpp:
const std::string Foo::PARAM_VALUE = "";
Foo::Foo()
{
...
}
ChildFoo.cpp:
const std::string Foo::PARAM_VALUE = "value";
ChildFoo::ChildFoo() : Foo()
{
...
}
Bar.h
class Bar
{
private:
std::string mName;
ChildFoo * mFoo;
}
Bar.cpp:私はこれらのキーの仮想ゲッターのルートを下に行かなければならないだろうと仮定が、私はこれを試してみるだろうと思ったし、それが動作を見つけるために少し驚いた
Bar::Bar()
{
...
}
int Bar::parseValue()
{
std::string key;
if (!mFoo->PARAM_VALUE.empty()) {
key = mFoo->PARAM_VALUE;
}
else {
key = mName;
}
...
}
。コンパイル時にはがChildFoo
によってオーバーライドされているので、それは考えられます。const
はその時点では制限されていません。しかし、私は完全には分かりません。
これはうまくいかないのですか?これはOKと考えられますか?この方法で何かをすることから来るかもしれない欠点はありますか?
乾杯、 ゲイリー
リンクしていますか?あなたは 'const std :: string Foo :: PARAM_VALUE' - > ODR違反の複数の(異なる)定義を持っています。 – Jarod42
それは私が望むようにコンパイルして実行します。 – GDYendell