请考虑以下代码:
template <class Crtp>
struct Base
{
const float& get(const short int i) const {return std::get<0>(tuple);}
const double& get(const int i) const {return std::get<1>(tuple);}
const long double& get(const unsigned long long int i) const {return std::get<2>(tuple);}
std::tuple<float, double, long double> tuple;
};
struct Derived
: public Base<Derived>
{
template <class... Misc, class Return = /*SOMETHING*/>
const Return& test(Misc&&... misc) const
{return this->get(std::forward<Misc>(misc)...);}
};
这是一个示例代码:它没有说明有用的东西,例如,可以使用自动函数声明来解决问题。我知道并且我没有搜索有关此特定示例的变通方法。
我的问题是:为了获得/*SOMETHING*/
的正确重载的返回类型,取决于传递的get
类型,Misc
会是什么?
答案 0 :(得分:2)
只需将decltype
与std::declval
(来自<type_traits>
)一起使用即可:
class Return = decltype(std::declval<Derived const>().get(std::declval<Misc>()...))