gpt4 book ai didi

c++ - 根据模板参数分配模板类的 static const float 成员

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:37 25 4
gpt4 key购买 nike

我有一个模板类:

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

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

最佳答案

在 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;

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

关于c++ - 根据模板参数分配模板类的 static const float 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22866964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com