如何在struct中连接std :: is_same

NOh*_*Ohs 4 c++ templates

我的enable_if陈述变得很长,所以我想以某种方式输入typedef.我不知道最好的方法是什么.

我试过这个,但它不起作用

template<typename T>
struct isValidImageFormat
{
    typedef 
        typename std::is_same<T, float>::value || 
        typename std::is_same<T, unsigned char>::value 
        value;
};
Run Code Online (Sandbox Code Playgroud)

错误是:

在{||«token typename std :: is_same :: value ||之前预期的nonqualified-id

问题:

  • 我的代码出了什么问题?
  • 什么是我的问题的一个很好的解决方案?

Joh*_*nck 11

你想要std::disjunction(哲学中用"或"这个奇特的词):

typedef std::disjunction<
    std::is_same<T, float>, 
    std::is_same<T, unsigned char>> condition;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用condition::value获取真或假值.或者,如果您只想要一个值,请尝试以下方法:

constexpr bool condition =
    std::is_same<T, float>::value || 
    std::is_same<T, unsigned char>::value;
Run Code Online (Sandbox Code Playgroud)


And*_*ski 5

typename当你想与类型工作的关键字时,在你的榜样,你要使用constexpr bool的值.

template<typename T>
struct isValidImageFormat
{
    constexpr static bool value =  
       std::is_same<T, float>::value || 
       std::is_same<T, unsigned char>::value;
};
Run Code Online (Sandbox Code Playgroud)