12

次の型特性が与えられた場合、Fieldsいくつかstd::pairの s で初期化するにはどうすればよいですか?

template <>
struct ManagerDataTrait<Person>
{
    static const std::unordered_map<std::string, std::string> Fields;
    // ...
};

ラムダを使用してみましたが、Visual Studio はFields明示的に特殊化できるエンティティではないと言っています。

template <>
const std::unordered_map<std::string, std::string> ManagerDataTrait<Person>::Fields = []{
    std::unordered_map<std::string, std::string> fields;
    fields.insert(std::make_pair("height", "FLOAT"));
    fields.insert(std::make_pair("mass", "FLOAT"));
    return fields;
};

特性でこのような静的メンバーを使用する方法がない場合、特性に情報を格納するためにどの代替手段が必要ですか? ( FieldsSQL データベース構造を保持します。)

更新:メンバーもそうかもしれませconstんが、それは重要ではありません.

4

3 に答える 3

27

波括弧リストからマップを初期化できることを理解していますか?

std::unordered_map<std::string, std::string> m { { "a", "bc" }
                                               , { "b", "xy" }
//                                               ...
                                               };
于 2013-11-03T21:32:14.023 に答える
2

Visual C++ は中括弧リストからの静的初期化をサポートするようになったので、次のようにすることができます。

const std::unordered_map<std::string, std::string> ManagerDataTrait<Person>::Fields{ { "abc", "xyz" }, { "cde", "zyx" } ...};
于 2015-06-15T22:13:49.827 に答える