我有一个这样的模板类:

template <unsigned N>
class Pixel {
    float color[N];
}

我希望有一个带有精确 N 参数的构造函数来初始化类中的数组,如下所示:
Pixel<N> (float x_1, float x_2, ..., float x_N) {
    color[0] = x_1;
    color[1] = x_2;
    ...
}

显然,我无法为每个 N 手动实现构造函数。那么我如何通过模板元编程或任何其他技术来实现这个目标呢?

最佳答案

其他答案很好也很实用,但这个问题很有趣,做类似事情背后的技术可以为类似但更复杂和/或更实际的问题和解决方案奠定良好的基础。以下是按照您描述的方式计算构造函数参数的内容:

template <unsigned int N>
class Pixel {
public:
    template<typename... Floats> //can't use float... anyway
    Pixel(Floats&&... floats) : color{std::forward<Floats>(floats)...} {
        static_assert(sizeof...(Floats) == N, "You must provide N arguments.");
    }

private:
    float color[N];
};

int main() {
    Pixel<3> p(3.4f, 5.6f, 8.f);
    Pixel<3> p2(1.2f); //static_assert fired
}

关于C++ 模板参数固定的函数参数数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17607080/

10-13 03:21