का वैराडिक सदस्य फ़ंक्शन मुझे एक समस्या का सामना करना पड़ रहा है जहां मैं एक विशिष्ट प्रकार के पैरामीटर पैक के साथ एक विविध सदस्य फ़ंक्शन बनाने की कोशिश कर रहा हूं।टेम्पलेट वर्ग
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