संभव डुप्लिकेट:
using declaration in variadic templatevariadic विस्तार
मैं हाल ही में दो समारोह वस्तुओं के संयोजन एक नया कार्य उद्देश्य यह है कि के रूप में यदि पहले दो बर्ताव करता है के रूप में करने के लिए a generic mechanism में आए अधिभारित किया गया था:
template <typename F1, typename F2>
struct overload : public F1, public F2
{
overload(F1 f1, F2 f2) : F1(f1), F2(f2) {}
using F1::operator();
using F2::operator();
};
मैं इस विचार को विस्तारित करने की कोशिश कर रहा हूं एन समारोह वस्तुओं के लिए ओ काम करते हैं, का उपयोग कर variadic टेम्पलेट्स:
test.cpp:6:24: error: parameter packs not expanded with '...':
using Fs::operator();...
^
test.cpp:6:24: note: 'Fs'
test.cpp:6:26: error: expected unqualified-id before '...' token
using Fs::operator();...
^
मैं कुछ रूपांतरों की कोशिश की है, इस तरह के:
template <typename... Fs>
struct overload : public Fs...
{
overload(Fs... fs) : Fs(fs)... {}
using Fs::operator();...
};
हालांकि, जीसीसी का उपयोग कर-घोषणा पर variadic विस्तार करने के लिए मेरे प्रयास के बारे में शिकायत के रूप में:
using Fs::operator()...;
और
using Fs...::operator();
लेकिन न तो चाल है।
क्या ऐसा करना संभव है?
ध्यान दें कि एक रूपांतरण प्रकार के साथ एक वर्ग प्रकार उदा। फ़ंक्शन पॉइंटर प्रकार (एक तथाकथित सरोगेट कॉल फ़ंक्शन) एक मजेदार प्रकार है और फिर भी इस तरह के तंत्र के साथ संगत नहीं है। इससे कोई फर्क नहीं पड़ता क्योंकि वे विदेशी हैं, लेकिन यह थोड़ा निराशाजनक है कि पूरी तरह सामान्य नहीं है (टीटीबीओएमके)। –
[यह] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) उपयोगी हो सकता है (यदि उत्तर के लिए नहीं, कम से कम प्रयास किए जाने के लिए)। –
@Luc: क्या वह प्रत्यक्ष डुप्लिकेट नहीं है? एक के रूप में बंद करने के लिए वोट दिया। – Xeo