私は型消去(voidキャスト)を使用して、1対1のマップに複数の基本型(float、bool、intなど)を格納しています。元のデータ型を再解釈する1つの方法は、代わりにペア/共用体/クラスを使用して、値を型識別子(たとえば、対)で保存することです。 BoostなしでC++ 11を使って識別子なしで基本型を解決するきれいな方法はありますか?型識別子なしのキャストvoidを再解析する
std::map<int, void *> m_mymap;
// avoid std::map<int, pair<void, MyEnum> > m_mymap;
template <class T> void setValue<T>(int i_key, T i_val)
{
m_mymap[i_key] = reinterprete_cast<void *>(i_val);
}
template <class T> T getValue<T>(int i_key)
{
return reinterprete_cast<T>(i_val);
}
doSomeWork()
{
for (const auto & elem : m_mymap)
{
auto val = some_magical_cast<???>(elem.second) // resolve type without a nasty switch against MyEnum
// do some work
}
}
編集:無効、使用するアップデートの質問*
「void」には、必要なデータが含まれていません。何も含まれていません。 – aschepler
本質的にvoid *マップを使用する考え方に似てキャストしました –
lukemtesta
あなたは 'boost :: any'を使いたくない理由はありますか?それはまさにその仕事の道具のようだ。 – templatetypedef