0

次のコードを検討してください。

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*/する正しいオーバーロードの戻り値の型を取得するにはどうすればよいですか?getMisc

4

1 に答える 1

2

decltypewith std::declval(from )を使用するだけ<type_traits>で問題ありません。

class Return = decltype(std::declval<Derived const>().get(std::declval<Misc>()...))
于 2013-07-02T08:48:51.793 に答える