我希望能够Particle<Color::X>
使用不同的“颜色”实例来复制构造一个。不同的实例化可能包含一组非常不同的成员,但它们都具有任意数量的共同成员(下面由 示例intensity
),这些成员必须由 ctor 复制。
当然,所讨论的 ctor 必须不接受不是Particle
.
中可能有无限数量的成员Color
,因此手动编写接受每个变体的构造函数是不切实际的。
我应该使用 SFINAE,还是有更简单的方法来实现这一点?
enum class Color
{
RED,
GREEN,
BLUE
};
template <enum Color>
struct Particle
{
int intensity;
Particle(int i) : intensity{i} {};
};
auto main() -> int
{
Particle<Color::RED> p1{42};
// Particle<Color::BLUE> p2(p1); <- How do I make this compile?
}