【发布时间】:2021-05-12 23:17:03
【问题描述】:
我希望能够使用不同的“颜色”实例来复制构造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?
}
【问题讨论】:
-
为什么你认为你需要 SFINAE?
-
@largest_prime_is_463035818 很难弄清楚如何使用直接模板来做到这一点。我有一种模糊的直觉类型特征,或者 SFINAE 在这里可能会帮助我,但我显然不是专家。
-
Nitpic:如果某物接受相同的类型,则它只是一个复制构造函数。单参数构造函数可以称为转换构造函数。
标签: c++ templates enums copy-constructor