0

現在、私はこのコードを持っています:

if(!variables["width"].defaulted())
{
    configTree.put(treeNames["width"], variables["width"].as<int>());
}

if(!variables["height"].defaulted())
{
    configTree.put(treeNames["height"], variables["height"].as<int>());
}

if(!variables["fullscreen"].defaulted())
{
    configTree.put(treeNames["fullscreen"], variables["height"].as<int>());
}

私はこれを簡単にしようとしています。私を止める唯一のことは、将来 std::string 変数も持つことです。つまり、すべての値を単純にループして as() を使用しても機能しません。

as<>() に boost::any を使用しようと考えましたが、うまくいきません (テンプレート エラーの負荷)。また、どのタイプになるかを指定する値を持つタプルを用意し、それを切り替えて適切な as<>() を呼び出すことも検討しましたが、それはやり過ぎのようです。

これを簡単にする方法はありますか?

4

1 に答える 1

1
template<class T> void xput(const char* name) {
    if(!variables[name].defaulted())
        configTree.put(treeNames[name], variables[name].as<T>());
}

xput<int>("width");
xput<int>("height");
xput<int>("fullscreen");
xput<std::string>("future-option");

ランタイム ポリモーフィズムを実現したい場合は、上記の関数をファンクターに変換し、boost::function に割り当てます。

于 2011-10-14T21:12:38.290 に答える