我有一个这样的模板类:
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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)