C++ 具有嵌套类型的类的概念
我正在编写一个概念,它要求类具有C++ 具有嵌套类型的类的概念,c++,c++14,c++-concepts,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) {
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;
};
};
}
模板
概念布尔谓词()
{
返回要求(T对象)
{
typename T::ValueType;
需要(T::ValueType值)
{
{T::Check(value)}->void;
};
};
}
编译时不会出现以下错误:
error:expected'),在“value”之前。
我找到了一个解决方案,它包括在两个不同的概念中拆分谓词
:
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>();
};
}
您将问题复杂化了:
template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
{ T::Check(obj) } -> void;
};
模板
concept bool Predicate=requires(typename T::ValueType obj){
{T::Check(obj)}->void;
};
Ahh。。。C++20。。。很好…requires
和typename
将是最低限度的修复。谢谢,我还发现我不需要t对象
部分。您仍然需要typename t::ValueType代码>在正文中,如果您希望它是偏序的,但是+1。
template <typename T>
concept bool Predicate = requires(typename T::ValueType obj) {
{ T::Check(obj) } -> void;
};