我遇到了一個問題,我嘗試使用特定類型的參數包創建可變成員函數。模板類的可變參數成員函數
template <typename T>
struct A
{
using result_type = T;
T operator()(T a, T b)
{
return a+b;
}
};
template <typename Functor>
struct B
{
using T = typename Functor::result_type;
T operator()(Functor &&f, T... args)
{
return f(args...);
}
};
預期一樣工作:
A<int> a;
B<A<int>> b;
int result = b(a, 2, 3); // should return 5
但是我得到以下錯誤:
error: type 'T' (aka 'typename Functor::result_type') of function parameter pack does not contain any unexpanded parameter packs
T operator()(Functor &&f, T... args)
~^~~~~~~~
error: pack expansion does not contain any unexpanded parameter packs
return f(args...);
~~~~^
什麼是正確的方式來實現預期的功能?
有沒有對參數的個數類型有所限制,或者使用的參數包的特定類型沒有標準的方式?如果答案是否定的話,我唯一可以做的一件事就是帶着的std :: is_same一個static_assert。 –
plasmacel
@plasmacel,看到更新 –
一個完美的答案。 – plasmacel