型がshared_ptrであるかどうかを調べるテンプレート化された方法を得たいと思います。それに基づいて、関数の新しい特殊化が必要です。コンパイル時に型がshared_ptrであるかどうかを検出する方法
例主な機能はt.valueがshared_ptrのであれば、私は別の機能の専門を持つようにしたい、
template <class T> inline
void CEREAL_LOAD_FUNCTION_NAME(RelaxedJSONInputArchive & ar, NameValuePair<T> & t)
{
std::cout << " CEREAL_LOAD_FUNCTION_NAME NameValuePair 1 " << std::endl;
ar.setNextName(t.name);
ar(t.value);
}
です。 私は、以下の
template <class T> inline
typename std::enable_if<is_pointer<T>::value, void>::type
CEREAL_LOAD_FUNCTION_NAME(RelaxedJSONInputArchive & ar, NameValuePair<T> & t)
{
std::cout << " CEREAL_LOAD_FUNCTION_NAME NameValuePair 2 " << std::endl;
ar.setNextName(t.name);
ar(t.value);
}
を試してみましたが、しかし、動作するようには思えません。これらはC++ 11シリアルライブラリの一部です。私はカスタマイズしようとしています。
'NameValuePair'は' t.value'が何であるかを伝えるメンバー型を持っていますか? – TartanLlama
ここでNameValuePairが定義されています。 https://uscilab.github.io/cereal/assets/doxygen/helpers_8hpp_source.html .itには型の値メンバーがあります。 –
「直接的な」過負荷が作用するはずです。http://coliru.stacked-crooked.com/a/db3eae53e609bcfc – sp2danny