可变参数模板类:允许 float 和 int 参数转换为 float?

问题描述 投票:0回答:1

我有以下课程:

template <size_t N, float... Lam> requires (sizeof...(Lam) == N)
class Spectrum {
public:
    Spectrum() : wavelengths{ static_cast<float>(Lam)... }
    {
        values.fill(0.f);
    };

    template <IsNumeric T>
    Spectrum(T v) : wavelengths{ static_cast<float>(Lam)... }
    {
        values.fill(static_cast<float>(v));
    };

    template <IsNumeric... T> requires (sizeof...(T) == N)
    Spectrum(T... v) : wavelengths{ static_cast<float>(Lam)... }, values { static_cast<float>(v)... } 
    { };

... // Other methods/overloads that aren't relevant here

private:
    std::array<float, N> values;
    const std::array<float, N> wavelengths;
};

然后我可以使用以下方式调用它:

Spectrum<3, 450.f, 500.f, 600.f> color{ 1,2,3 };

它的行为符合预期(波长用

450.f, 500.f, 600.f
填充,值用
1.f, 2.f, 3.f
填充。

我希望能够允许用户拨打:

Spectrum<3, 450, 500, 600> color{1,2,3};

在这种情况下,

450
是一个
int
,所以我需要将它转换为
float
,就像我在构造函数模板中已经做的那样。 我只是不确定类模板本身是否可以表达类似的想法。

c++ templates variadic-templates
1个回答
0
投票
template<auto...Lam>
using Spectrum_t = Spectrum<sizeof...(Lam), static_cast<float>(Lam)...>;

他们甚至不必通过

3
。 不知道为什么你会通过它。

© www.soinside.com 2019 - 2024. All rights reserved.