具有嵌套类型的类的概念

时间:2017-01-30 09:11:54

标签: c++ c++14 c++-concepts

我正在编写一个概念,要求类具有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'

2 个答案:

答案 0 :(得分:4)

这是我找到的一个解决方案,其中包括将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>();
    };
}

wandbox example

或者,您可以将requires子句与&&

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

wandbox example

答案 1 :(得分:4)

你过度卷曲了这个问题:

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