1

std::map<const char*, boost::any>ライブラリの設定を保存するために使用しています。各設定は単一の基になる値の型のみを使用し、構成の呼び出し中にこれを強制したいと考えてset()います。設定は、正しいタイプのデフォルト値で初期化されます。

これは、私が達成しようとしていることをうまく示している疑似コードです。

using namespace std;
using namespace boost;

void set(map<const char *, any> &settings, const char *key, any &value)
{
    if (type_of(value) != type_of(settings[key]) throw wrong_type_exception();
    settings[key] = value;
}

実行時にこのような型エラーをトラップすることは可能ですか? 可能であれば、API にテンプレート関数を含めたくないです。

私は使用しましたが、それが唯一の実行可能な解決策である場合は、boost::anyboost::variant を検討するかもしれません。which()

4

1 に答える 1

2

value.type() != settings[key].type()

settings[key]以前に存在しなかった場合settings[key].type()は、です。これは、が空の場合にのみtypeid(void)等しいと比較されます。したがって、この関数を介して新しい設定/値のペアを追加することはできませんが、意図されていると思われる擬似コードに基づいています。value.type()value

于 2011-12-05T11:07:53.167 に答える