我试图创建一个模板化类的部分专用成员,其中内部类的模板类型来自外部类...以下:
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;
};
Run Code Online (Sandbox Code Playgroud)
失败了
error: too few template-parameter-lists
template <typename T> struct Num<T>::VH<0>
Run Code Online (Sandbox Code Playgroud)
以下内容:
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;
};
Run Code Online (Sandbox Code Playgroud)
只是感觉不对(error: expected template-id before '<' token
template <typename T> struct Num<T>::template<> VH<0>
)
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;
};
Run Code Online (Sandbox Code Playgroud)
给出错误:
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'
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我知道正确的语法,我现在似乎无法弄清楚...?
语法是
template <typename T>
template <>
struct Num<T>::VH<0>
{
enum {value = 1};
T v = value;
};
Run Code Online (Sandbox Code Playgroud)
但不幸的是,不可能完全专门化内部结构.但你可以部分专门化它:
同
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;
};
};
Run Code Online (Sandbox Code Playgroud)
做
template <typename T>
template <int dummy>
struct Num<T>::VH<0, dummy>
{
enum {value = 1};
T v = value;
};
Run Code Online (Sandbox Code Playgroud)