作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Here 指出 C++17 中的演绎指南将使 std::make_tuple
过时。然而,据我所知,std::make_tuple
和 std::tuple::tuple
的标准推导指南之间的区别在于给定一个 std::reference_wrapper
, std::make_tuple
将推导出一个引用。
这个推导如何用推导来实现?类似的东西,但扩展到 std::tuple::tuple
具有的模板 Args...
:
#include <tuple>
#include <functional>
template <typename T>
struct Element {
Element(std::reference_wrapper<std::decay_t<T>> rw) : value_{rw.get()} {}
Element(T t) : value_{std::move(t)} {}
T value_;
};
template <typename T> Element(T) -> Element<T>;
template <typename T> Element(std::reference_wrapper<T>) -> Element<T&>;
template <typename T> Element(std::reference_wrapper<const T>) -> Element<const T&>;
struct A {
int i;
};
int main()
{
A a{10};
Element wa{std::ref(a)};
static_assert(std::is_lvalue_reference_v<decltype(wa.value_)>);
Element wb{A{15}};
static_assert(std::is_object_v<decltype(wb.value_)>);
}
Example .
最佳答案
template<class T> struct unwrap { using type = T; };
template<class T> struct unwrap<reference_wrapper<T>> { using type = T&; };
template<class... Ts>
tuple(Ts...) -> tuple<typename unwrap<Ts>::type...>;
关于c++ - 是否可以通过演绎指南实现整个 std::make_tuple 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50635291/
我是一名优秀的程序员,十分优秀!