我正在尝试创建一个模板化类的部分专用成员,其中内部类的模板类型来自外部类......以下内容:
template<typename T>
struct Num
{
template <T n>
struct VH
{
enum { value = n };
T v = value;
};
};
template <typename T> struct Num<T>::VH<0>
{
enum {value = 1};
T v = value;
};
template <typename T> struct Num<T>::VH<1>
{
enum {value = 0};
T v = value;
};
失败
error: too few template-parameter-lists
template <typename T> struct Num<T>::VH<0>
以及以下内容:
template <typename T> struct Num<T>::template<> VH<0>
{
enum {value = 0};
T v = value;
};
template <typename T> struct Num<T>::template<> VH<1>
{
enum {value = 1};
T v = value;
};
感觉不对(error: expected template-id before '<' token
template <typename T> struct Num<T>::template<> VH<0>
)
阅读后 explicit specialization of template class member function 以下
template <typename T> template<> struct Num<T>::VH<0>
{
enum {value = 0};
T v = value;
};
template <typename T> template <> struct Num<T>::VH<1>
{
enum {value = 1};
T v = value;
};
给出错误:
error: invalid explicit specialization before '>' token
template <typename T> template<> struct Num<T>::VH<0>
^
error: enclosing class templates are not explicitly specialized
error: template parameters not used in partial specialization:
template <typename T> template<> struct Num<T>::VH<0>
^
error: 'T'
任何人都可以让我知道正确的语法,我现在似乎无法弄明白......?
答案 0 :(得分:5)
语法为
template <typename T>
template <>
struct Num<T>::VH<0>
{
enum {value = 1};
T v = value;
};
但不幸的是,不可能完全专门化内部结构。 但你可以部分专门化它:
使用
template<typename T>
struct Num
{
template <T n, int dummy = 0> // Add extra dummy for partial specialization
struct VH
{
enum { value = n };
T v = value;
};
};
待办事项
template <typename T>
template <int dummy>
struct Num<T>::VH<0, dummy>
{
enum {value = 1};
T v = value;
};