根据模板参数分配模板类的静态const float成员

时间:2014-04-04 15:30:28

标签: c++ templates

我有一个模板类:

template<int A, int B>
struct MyStruct
{
    enum
    {
        a = A,
        b = B
    };

    static const float c;

};

我想将c定义为a和b的函数。像这样:

//Hypotetic, doesn't compile since MyStruct isn't specialized.
const float MyStruct::c = MyStruct::a / static_cast<float>(MyStruct::b);

我已经有了“真实”代码的其他解决方案。我只是好奇而已。你会怎么做?

1 个答案:

答案 0 :(得分:1)

在c ++ 11中,您只需初始化内联常量,如下所示:

static constexpr float c = (a + b + 5.);

在c ++ 98中你保持结构不变,然后你将静态变量声明为:

template<int A, int B>
const float MyStruct<A, B>::c = A + B + 5.;

template<int A, int B>
const float MyStruct<A, B>::c = MyStruct<A, B>::a + MyStruct<A, B>::b + 5.;

无论哪个更有意义。

请注意,您甚至可以专门设定c的值。在您的示例中,如果B为零,则将除以0.可能的解决方案是:

template<int A>
struct MyStruct<A, 0>
{
    enum
    {
        a = A,
        b = 0
    };

    static const float c;

};

template<int A>
const float MyStruct<A, 0>::c = A;

这有点麻烦,但却是专门化静态成员变量的唯一方法。