具有嵌套类型的类的概念



我正在编写一个概念,要求类具有ValueType类型别名并具有静态函数Check,该函数接受ValueType并返回void

这是我到目前为止所拥有的:

template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;
        requires (T::ValueType value)
        {
            {T::Check(value)} -> void;
        };
    };
}

这不会编译并显示以下错误:error: expected ')' before 'value' .

你把问题过度复杂化了:

template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
    { T::Check(obj) } -> void;
};
这是我

找到的一个解决方案,它包括将Predicate拆分为两个单独的概念:

template <typename T>
concept bool HasCheck()
{
    return requires (typename T::ValueType value)
    {
        {T::Check(value)} -> void;
    };
};
template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;
        requires HasCheck<T>();
    };
}

魔杖盒示例


或者,您可以使用 && 链接requires子句:

template <typename T>
concept bool Predicate()
{
    return requires(T object)
    {
        typename T::ValueType;        
    } 
    && requires (typename T::ValueType value)
    {
        {T::Check(value)} -> void;
    };
}

魔杖盒示例

最新更新