我有一个模板类:
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);
我已经有了“真实”代码的其他解决方案。我只是好奇而已。你会怎么做?
答案 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;
这有点麻烦,但却是专门化静态成员变量的唯一方法。