小编e.f*_*man的帖子

使用可变数量的浮点参数

我正在尝试为我的struct Polynomial实现一个灵活的构造函数:

struct Polynomial
{
    std::vector<float> coefficients;
    size_t degree;
};
Run Code Online (Sandbox Code Playgroud)

多项式的程度是可变的.我想要的是拥有像这样的构造函数

Polynomial(float... _coefficients);
Run Code Online (Sandbox Code Playgroud)

我尝试过variadic模板:

template<float... Args>
Polynomial(Args... args);
Run Code Online (Sandbox Code Playgroud)

但浮动是非类型的,所以我做了:

template<typename... Args>
Polynomial(Args... args);
Run Code Online (Sandbox Code Playgroud)

但这允许我的系数是任何东西,而不是我想要的.我知道我可以使用:

Polynomial(size_t _degree, ...);
Run Code Online (Sandbox Code Playgroud)

但它真的不安全.

目前我正在使用:

Polynomial(std::vector<float>);
Run Code Online (Sandbox Code Playgroud)

但这迫使调用如下:

Polynomial P({f1, f2, f3}); // with fn floats
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有一个很好的方法来做到这一点.

谢谢 !

c++ templates variadic-templates c++11

12
推荐指数
2
解决办法
805
查看次数

如果参数条件为真,则阻止执行返回函数

就像在标题上说的那样,我想知道是否有可能阻止执行功能.在我的特定情况下,我正在尝试创建一个operator []并阻止utilisator使用它,如果参数中的值太高:

在.h:

class Vec4
{
    float x,y,z,w;

    public:

        float operator[](const unsigned int i);
}
Run Code Online (Sandbox Code Playgroud)

在.cpp中:

float Vec4::operator[](const unsigned int i)
{
    if(i == 0) return x;
    if(i == 1) return y;
    if(i == 2) return z;
    if(i == 3) return w;
}
Run Code Online (Sandbox Code Playgroud)

如果i> = 4,我想"打破"这个功能.目前我只是在制作一个控制台输出并返回0.0f

谢谢你告诉我,如果有办法......或不!

c++

6
推荐指数
1
解决办法
132
查看次数

标签 统计

c++ ×2

c++11 ×1

templates ×1

variadic-templates ×1