C++:嵌套的std::条件

C++:嵌套的std::条件,c++,templates,conditional-statements,std,C++,Templates,Conditional Statements,Std,我有一个简单的图像结构,其中包含实际的图像数据。它可以以不同的顺序存储。这是对所用结构的简化: 样板 结构映像 { 公众: 私人: 枚举类ColorOrder1 { 未知的 强烈 }; 枚举类ColorOrder3 { 未知的 RGB, BGR }; 枚举类ColorOrder4 { 未知的 RGBA, BGRA }; 公众: 使用色序= typename std::conditional::type; //ColorOrder ColorOrder;//您缺少内部std::conditiona

我有一个简单的图像结构,其中包含实际的图像数据。它可以以不同的顺序存储。这是对所用结构的简化:

样板 结构映像 { 公众: 私人: 枚举类ColorOrder1 { 未知的 强烈 }; 枚举类ColorOrder3 { 未知的 RGB, BGR }; 枚举类ColorOrder4 { 未知的 RGBA, BGRA }; 公众: 使用色序= typename std::conditional::type; //ColorOrder ColorOrder;//您缺少内部std::conditional的::类型

或者在C++14中

using ColorOrder =
        std::conditional_t<C == 4,
                           ColorOrder4,
                           std::conditional_t<C == 3, ColorOrder3, ColorOrder1>>;

……啊,老兄,问了这个问题后,我很快就发现了问题所在:

使用ColorOrder=typename std::conditional< C==4,颜色顺序为4, typename std::conditional::type>::type;
请注意我以前遗漏的额外的typename和::type。

我会以不同的方式执行此操作:

公众: 使用PossibleOrders=std::tuple; 使用ColorOrder=typename std::tuple\u元素::type; ColorOrder ColorOrder=ColorOrder::未知; IMO这种方法更灵活,更容易阅读


顺便说一句,使用std::shared\u ptr有点奇怪。可能你想在图像之间共享数据。

如果你使用C++14或更高版本,你可以使用std::conditional\t而不是typename std::conditional。这对大多数类型特征来说都是正确的。是的!非常感谢!我也刚刚弄明白了。哦,是的,C++14版本有额外的点!好得多!是的,这看起来是独立的ed相当不错。共享的ptr有什么奇怪的地方吗?作为旁注:这里也可以使用std::tuple元素,而且可能的顺序可以是私有的。
using ColorOrder =
        typename std::conditional<C == 4,
                                  ColorOrder4,
                                  typename std::conditional<C == 3,
                                                            ColorOrder3,
                                                            ColorOrder1
                                                           >::type
                                  >::type;
using ColorOrder =
        std::conditional_t<C == 4,
                           ColorOrder4,
                           std::conditional_t<C == 3, ColorOrder3, ColorOrder1>>;