为什么我在定义这个 C++ 概念时会出错?
Why am I getting errors when I define this C++ concept?
我正在学习 Josh Lospinoso 的 C++ 速成课程,并且我正在尝试向我展示如何使用概念来约束方法参数的示例,并且还想让我使用 type_traits。但是,我收到错误消息,指出它的参数列表丢失并且它具有无效的类型说明符组合。这是概念和方法:
template <typename T>
concept bool Averageable() {
return std::is_default_constructible<T>::value && requires (T a, T b) {
{ a += b } -> T;
{ a / size_t{ 1 } } -> T;
};
}
template <Averageable T>
T mean(const T* values, size_t length) {
T result{};
for (size_t i{}; i < length; i++) {
result += values[i];
}
return result / length;
}
我认为您以错误的方式定义了您的概念。它应该是这样的:
template <typename T>
concept Averageable =
std::is_default_constructible<T>::value && requires (T a, T b) {
{ a += b } -> std::same_as<T>;
{ a / size_t{ 1 } } -> std::same_as<T>;
};
我没有在 MVSC 中启用 C++20。没想到必须要做,但它做到了,所以现在一切都很好。
我正在学习 Josh Lospinoso 的 C++ 速成课程,并且我正在尝试向我展示如何使用概念来约束方法参数的示例,并且还想让我使用 type_traits。但是,我收到错误消息,指出它的参数列表丢失并且它具有无效的类型说明符组合。这是概念和方法:
template <typename T>
concept bool Averageable() {
return std::is_default_constructible<T>::value && requires (T a, T b) {
{ a += b } -> T;
{ a / size_t{ 1 } } -> T;
};
}
template <Averageable T>
T mean(const T* values, size_t length) {
T result{};
for (size_t i{}; i < length; i++) {
result += values[i];
}
return result / length;
}
我认为您以错误的方式定义了您的概念。它应该是这样的:
template <typename T>
concept Averageable =
std::is_default_constructible<T>::value && requires (T a, T b) {
{ a += b } -> std::same_as<T>;
{ a / size_t{ 1 } } -> std::same_as<T>;
};
我没有在 MVSC 中启用 C++20。没想到必须要做,但它做到了,所以现在一切都很好。