我有一个简单的图像结构,其中包含实际图像数据。它可以按不同的顺序存储。这是使用的结构的简化:
template <typename T, size_t C>
struct Image
{
public:
private:
enum class ColorOrder1
{
UNKNOWN,
INTENSITY
};
enum class ColorOrder3
{
UNKNOWN,
RGB,
BGR
};
enum class ColorOrder4
{
UNKNOWN,
RGBA,
BGRA
};
public:
using ColorOrder =
typename std::conditional<C == 4, ColorOrder4,
std::conditional<C == 3, ColorOrder3, ColorOrder1>>::type;
// ColorOrder colorOrder; // <---- This works fine
ColorOrder colorOrder = ColorOrder::UNKNOWN; // <---- This does not
std::shared_ptr<const std::vector<T>> data;
/* .. and more data. but not imported */
};
我试图根据 std::conditional 的通道数限制可能的颜色顺序。例如,如果我们只有一个单通道图像,则顺序不应该是 RGBA。这基本上有效。但是,如果我尝试将UNKNOWN
所有情况的颜色顺序默认为默认值,它将不再编译。虽然UNKNOWN
存在于所有枚举中。我得到的结果错误是:
error: ‘UNKNOWN’ is not a member of ‘Image<unsigned char, 3>::ColorOrder’ {aka ‘std::conditional<true, Image<unsigned char, 3>::ColorOrder3, Image<unsigned char, 3>::ColorOrder1>’}
ColorOrder colorOrder = ColorOrder::UNKNOWN;
我确实认为我的嵌套std::conditional
实际上是失败的。如何正确写这个?
提前感谢您的任何反馈。