这运行:
template <class z>
struct u {z Z;};
template <int>
class n;
template <>
class n<3>: public u<int>
{
public:
const int N = 3;
n() : u({3}){}
};
但是重复使用幻数而不是模板参数会有错误的风险。
遗憾的是,这是不可能的:
template <int T = 3>
class n<T>: public u<int>
{
public:
const int N = T;
n() : u({T})
{}
};
有更好的方法吗?
答案 0 :(得分:0)
您可能仍然使用额外的图层:
template <int Size>
class n_impl : public u<int>
{
public:
const int N = Size;
n() : u({Size}) {}
};
template <> class n<3> : n_impl<3> {};
答案 1 :(得分:0)
重复使用幻数而不是模板参数存在错误风险...
你可以通过简单的包装来摆脱重复的3
:
struct MagicNumber
{
static constexpr int Number = 3;
};
然后你的n
去了:
template <>
class n<MagicNumber::Number>: public u<int>
{
public:
n() : u(MagicNumber::Number){}
};