Я не понимаю, почему следующее не удается:шаблона частичной специализации не будет работать
#include <cassert>
#include <memory>
#include <utility>
using namespace std;
template<typename... T> struct name{ static const char* value; };
template<typename... T> const char* name<T...>::value = "unknown";
template <> const char* name<int>::value = "int";
template <> const char* name<float>::value = "float";
template <> const char* name<template<typename,typename> class T>::value = "pair";
int main()
{
assert(name<int>::value == "int");
assert(name<float>::value == "float");
assert(name<double>::value == "unknown");
assert((name<pair<int, char> >::value) == "pair");
}
проблема находится в линии
template <> const char* name<template<typename,typename> class T>::value = "pair";
[temp.class.spec.mfunc] следует определите это поведение, но, прочитав стандарт, я все еще не понимаю его. Может ли кто-нибудь объяснить мне (самым ясным и лаконичным образом), почему никто из них не работает?
template <> const char* name<template<typename,typename> class T>::value = "pair";
template <typename T1, typename T2> const char* name<std::pair<T1,T2>>::value = "pair";
http://stackoverflow.com/questions/26440493/template-class-specialization-with-template кажется, то же назначение, вы можете быть заинтересованы в ответах там – Mat
I не понял этот ответ в первую очередь – Dean
1. Вы не можете частично специализировать членов класса, 2. вы используете недействительный синтаксис для частичной специализации для шаблонов классов с двумя параметрами –