Я хочу получить шаблонный способ поиска, если тип является shared_ptr, и на основе этого я хочу получить новую специализацию функции.Как определить, является ли тип 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);
}
Если t.value является shared_ptr, то я хочу иметь другую функцию специализации. Я попытался ниже,
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 cereal. Который я пытаюсь настроить.
ли '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