我不明白爲什麼以下故障:模板偏特將無法正常工作
#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 2014-10-18 14:39:41
我首先不理解這個答案 – Dean 2014-10-18 14:40:05
1.你不能部分地專門化類的成員,2.你使用無效的語法來部分專用於雙參數類模板 – 2014-10-18 14:46:12