私は持っている:
unarchive
ディクショナリとキーを取り、渡されたテンプレート タイプ ( ) に基づいてテンプレート ルーチンをT
特殊化して、T
struct
を活用unarchive
してメンバーを構築する a のコンストラクター
例は次のとおりです。
template <typename T>
T unarchive(const dictionary_t&, key_type key);
struct foo
{
foo(const dictionary& archive) :
value_m(unarchive<decltype(value_m)>(archive, value_key))
{ }
some_value_type value_m;
};
ここで使用する利点は、このコード行を更新せずunarchive<decltype(value_m)>
に型を変更できることですvalue_m
。型は常にメンバー変数の型に従います。
私が抱えている問題は、より審美的なものです。非常に冗長です。現在、私はマクロを持っています:
#define UNARCHIVE_FOR(var) unarchive<decltype(var)>
のfoo
コンストラクタは次のように変更されます。
foo(const dictionary& archive) :
value_m(UNARCHIVE_FOR(value_m)(archive, value_key))
{ }
これで、より簡潔ですが、はるかに醜い結果が得られました。マクロなしで同じ結果を達成できますか? 私が望むのは、次のようなものです。
foo(const dictionary& archive) :
value_m(unarchive<value_m>(archive, value_key))
{ }
これはどのように行うことができますか?