2
我想獲得給定參數包的std::make_tuple
返回的類型。到現在爲止我寫了下面的代碼:result_of,make_tuple,參數包
#include <tuple>
#include <functional>
template <class T>
struct unwrap_refwrapper
{
using type = T;
};
template <class T>
struct unwrap_refwrapper<std::reference_wrapper<T>>
{
using type = T&;
};
template <class T>
using special_decay_t = typename unwrap_refwrapper<typename std::decay<T>::type>::type;
template<class ... Types>
struct foo
{
typedef std::tuple<special_decay_t<Types>...> tuple_t;
};
int main()
{
short s;
// t should be std::tuple<int, double&, short&>
typedef foo<int, double&, decltype(std::ref(s))>::tuple_t t;
}
但我覺得它很醜陋複製possible implementation of std::make_tuple
,我在這裏做的一部分。
我想用std::result_of
或其他類似的東西來達到給定的效果。
我嘗試如下所示:
#include <tuple>
#include <functional>
template<class ... Types>
struct foo
{
typedef typename std::result_of<
std::make_tuple(Types...)>::type tuple_t;
};
int main()
{
short s;
// t should be std::tuple<int, double&, short&>
typedef foo<int, double&, decltype(std::ref(s))>::tuple_t t;
}
但它確實not compile。
怎麼辦?
你應該給'result_of'一個可調用的對象,但實際上它是調用該函數的結果。你可以使用'decltype'代替它。 – BoBTFish
爲什麼你需要複雜的邏輯來反向設計'make_tuple'的返回類型?這是指定的,並不是超級複雜的。 –
@KerrekSB:我儘量避免對'make_tuple'的返回類型進行反向工程,到目前爲止還沒有成功。但[T.C.S答案](http://stackoverflow.com/questions/42001013/result-of-make-tuple-parameter-pack/42001110#42001110)正是我所期待的。 –