作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是概念新手。据我了解the concept library列出所有可用的标准概念。然而,似乎没有像 std::decay 这样的东西?比较以下一般用例,我想将方法的输入限制为类专门化类型:
#include <type_traits>
#include <concepts>
template <typename T>
struct some_struct
{
template <typename U, typename = std::enable_if_t<std::is_same_v<std::decay_t<U>, T>>>
void do_something(U obj) {
return ;
}
};
int main()
{
some_struct<int> obj;
obj.do_something(0);
}
我怎样才能用概念来完成这个?
最佳答案
您可以添加这样的概念:
template <typename U, typename T>
concept DecaysTo = std::same_as<std::decay_t<U>, T>;
这将允许:
template <DecaysTo<T> U>
void do_something(U&&);
请注意,这仅在使用转发引用时才真正有意义。在参数类型为 U
的原始示例中, std::decay_t<U>
只是U
, 所以 DecaysTo<T>
减少到 std::same_as<T>
.它仍然是正确的,只是不必要地涉及。
关于C++ 概念等同于 std::decay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73829793/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!