c ++模板专业化:获取模板参数

时间:2018-03-15 12:29:06

标签: c++ templates

这运行:

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})
    {}
};

有更好的方法吗?

2 个答案:

答案 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){}
};