别名 return 类型的 const 重载函数
Alias the return type of a const overloaded function
我有以下重载函数:
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)
??
现在我想为我的新函数 return 类型起别名 get
:
using type = typename decltype(aux::get<I>(data))::type;
这里用的是哪一个? const 与否?我该如何选择?我想为两者起别名! data
是非常量
是的,第一个使用 const
重载,第二个使用非 const
重载。那是因为 _t
在第一种情况下是 const
而在第二种情况下是非 const
。
类型别名使用哪一个取决于data
的类型。是const
吗?如果是,则 const
重载是别名。如果不是,则非 const
是。
要获得任何类型的 "virtual value",您可以使用 std::declval
。此代码将别名为 const
版本:
using type = typename decltype(aux::get<I>(std::declval<const YourTypeHere>()))::type;
我有以下重载函数:
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)
??
现在我想为我的新函数 return 类型起别名 get
:
using type = typename decltype(aux::get<I>(data))::type;
这里用的是哪一个? const 与否?我该如何选择?我想为两者起别名! data
是非常量
是的,第一个使用 const
重载,第二个使用非 const
重载。那是因为 _t
在第一种情况下是 const
而在第二种情况下是非 const
。
类型别名使用哪一个取决于data
的类型。是const
吗?如果是,则 const
重载是别名。如果不是,则非 const
是。
要获得任何类型的 "virtual value",您可以使用 std::declval
。此代码将别名为 const
版本:
using type = typename decltype(aux::get<I>(std::declval<const YourTypeHere>()))::type;