1

次のようなコードを書く必要があります

if ( itr->second == "char" ) 
{
    MemberProperty<Owner,char> *ptr = (MemberProperty<Owner, char> *)GetterSetterItr->second;
    pw->writeChar(itr->first.c_str() ,(pOwner->*(ptr->m_Getter))());
} else if ( itr->second == "wchar" ) {
   MemberProperty<Owner,wchar_t> *ptr = (MemberProperty<Owner, wchar_t> *)GetterSetterItr->second;
   pw->writeWideChar(itr->first.c_str() ,(pOwner->*(ptr->m_Getter))());
}

多くの種類がありますが、これをこの種類のコードの1回の呼び出しに減らすための、C ++のトリック、できればテンプレートのトリックはありますか。

4

1 に答える 1

0

writeChar() と writeWideChar() がパラメーターの型を除いて同一であると仮定すると、次のようにコードを再構築できます。

if (it->second == "char")
  pw->writeChar<char>(itr->first, GetterSetterItr->second);
else if (itr->second == "wchar")
  pw->writeChar<wchar_t>(itr->first, GetterSetterItr->second);

次に、*pw がインスタンスであるクラスで、writeChar と writeWideChar をテンプレート メンバー関数に置き換えます。

template <typename CharType>
void writeChar(std::string str, /*the type of GetterSetterItr->second*/ arg) {
  MemberProperty<Owner, CharType> *ptr = (MemberProperty<Owner, CharType>*)arg;
  // the rest of code of old writeChar() and writeWideChar()
}
于 2012-11-05T09:08:44.517 に答える