【发布时间】:2018-11-08 19:42:45
【问题描述】:
假设我有两个班级:
template <unsigned N>
class Pixel {
float color[N];
public:
Pixel(const std::initializer_list<float> &il)
{
// Assume this code can create a Pixel object from exactly N floats, and would throw a compiler error otherwise
}
};
template <unsigned N>
class PixelContainer {
std::vector<Pixel<N>> container;
};
我要做的是为PixelContainer 编写一个构造函数,这样:
它会在以下情况下正确实例化(例如,并非详尽无遗):
PixelContainer<3> pc1(1, 2, 3) // Creates a container containing one Pixel<3> objects
PixelContainer<3> pc2(1, 2, 3, 4, 5, 6) // Creates a container containing 2 Pixel<3> objects
PixelContainer<2> pc3(1, 2, 3, 4, 5, 6) // Creates a container containing 3 Pixel<2> objects
以下情况无法编译(例如,并非详尽无遗):
PixelContainer<3> pc4(2, 3) // Not enough arguments
PixelContainer<2> pc5(1, 2, 3, 4, 5) // Too many arguments
如何使用模板元编程实现上述目标?我觉得它应该是可以实现的,但不知道如何实现。具体来说,我确实不想自己进行分组,例如
PixelContainer<2> pc2({1, 2}, {3, 4}, {5, 6}) // Creates a container containing 3 Pixel<2> objects
(请参阅question 了解我背后的灵感)
【问题讨论】:
-
在上一个 sn-p 中,您的意思肯定是
PixelContainer<2>和“包含 3 个像素 对象”吗? -
没错,已更正!谢谢:)
标签: c++ templates initialization c++14 template-meta-programming