别名 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;