2012-10-01 18 views
5

संभव डुप्लिकेट:
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(); 

लेकिन न तो चाल है।

क्या ऐसा करना संभव है?

+1

ध्यान दें कि एक रूपांतरण प्रकार के साथ एक वर्ग प्रकार उदा। फ़ंक्शन पॉइंटर प्रकार (एक तथाकथित सरोगेट कॉल फ़ंक्शन) एक मजेदार प्रकार है और फिर भी इस तरह के तंत्र के साथ संगत नहीं है। इससे कोई फर्क नहीं पड़ता क्योंकि वे विदेशी हैं, लेकिन यह थोड़ा निराशाजनक है कि पूरी तरह सामान्य नहीं है (टीटीबीओएमके)। –

+1

[यह] (http://stackoverflow.com/questions/7870498/using-declaration-in-variadic-template) उपयोगी हो सकता है (यदि उत्तर के लिए नहीं, कम से कम प्रयास किए जाने के लिए)। –

+0

@Luc: क्या वह प्रत्यक्ष डुप्लिकेट नहीं है? एक के रूप में बंद करने के लिए वोट दिया। – Xeo

उत्तर

0

के बजाय “ मैं हाल ही में, एक सामान्य तंत्र ” में आए कृपया संदर्भ प्रदान करते हैं इस तरह के “ के रूप में मैं हाल ही में एक सामान्य तंत्र ” है & hellip का वर्णन एक blog posting by Dave Abrahams में आए ;.

मुझे शक है कि पैरामीटर पैक विस्तार using बयान के लिए समर्थित है, और मैं ’ खेद मैं ’ डॉन मीटर टी समय मानक – कि ’ रों फिर अपने काम की जांच करने के लिए है, के लिए मांगने से पहले प्रलेखन पढ़ प्रश्न।

लेकिन हाथ में समस्या को हल करने के व्यावहारिक मामले (भाषा प्रश्न के बजाए), आप हमेशा इसे सीधे विस्तार का उपयोग करने के बजाय इसे लगातार कोड कर सकते हैं। बस एक वर्ग से उत्तराधिकारी है जो बाकी के मकसदों को लाता है, फिर पहले व्यक्ति को लाता है। जहां “ बाकी ” रिकर्सिव चरण है, जो मूल मामले के रूप में मज़दूरों की एक खाली सूची में समाप्त होता है।

+0

मेरा मतलब है कि मैंने जहां तंत्र को प्रश्न में देखा था, वहां एक लिंक जोड़ना था, लेकिन जब मैंने प्रश्न लिखा था तब मुझे लेख नहीं मिला या उसका नाम याद नहीं आया। इसे खोदने के लिए धन्यवाद! – HighCommander4

+0

पुनरावर्ती समाधान एक अच्छा विचार है। असल में, आपके द्वारा लिंक किए गए आलेख में ऐसे समाधान के लिए एक फुटनोट (https://gist.github.com/3779345) में एक लिंक है। – HighCommander4

+0

@ हाई कॉमांडर 4: हे, मुझे नहीं पता था। –

संबंधित मुद्दे