我有以下重载功能:
template<size_t N, typename T>
auto get(const T & _t) -> decltype(std::get<...>(_t)) {
...
}
template<size_t N, typename T>
auto get(T & _t) -> decltype(std::get<...>(_t)) {
...
}
第一个问题是:
第一个是否使用std::get(const tuple<_Elements...>& __t)
第二个std::get(tuple<_Elements...>& __t)
??
现在我想为新函数get
的返回类型添加别名:
using type = typename decltype(aux::get<I>(data))::type;
这里使用哪一个? const还是不?我该如何选择?我想两个别名!! data
是非const
答案 0 :(得分:3)
是的,第一个使用const
重载,第二个使用非const
重载。这是因为_t
在第一种情况下为const
而在第二种情况下为非const
。
类型别名中使用哪一个取决于data
的类型。是const
吗?如果是这样,const
重载是别名。如果不是,那么非const
就是。
获得&#34;虚拟价值&#34;任何类型,您都可以使用std::declval
。此代码将为const
版本添加别名:
using type = typename decltype(aux::get<I>(std::declval<const YourTypeHere>()))::type;