class 嵌套类型的概念
Concept for a class with nested types
我正在写一个概念,要求 class 有一个 ValueType
类型别名和一个静态函数 Check
,需要 ValueType
和 returns 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'
.
这是我找到的一个解决方案,它包括将 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;
};
}
你是over-compicating问题所在:
template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
{ T::Check(obj) } -> void;
};
我正在写一个概念,要求 class 有一个 ValueType
类型别名和一个静态函数 Check
,需要 ValueType
和 returns 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'
.
这是我找到的一个解决方案,它包括将 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;
};
}
你是over-compicating问题所在:
template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
{ T::Check(obj) } -> void;
};