别名const重载函数的返回类型

时间:2015-06-17 13:42:38

标签: c++ c++11 const decltype

我有以下重载功能:

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

1 个答案:

答案 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;