2012-03-12 12 views
16

मैं वर्तमान में निम्न कोड के साथ संघर्ष कर रहा हूँ, आशय जिनमें से variadic variadic टेम्पलेट टेम्पलेट्स लागू करने के लिए है निम्नलिखित:variadic variadic टेम्पलेट टेम्पलेट्स

template <typename...> struct obj1 {}; 
template <typename...> struct obj2 {}; 

typedef join 
< 
    obj1<int, int, double>, 
    obj1<double, char>, 
    obj1<char*, int, double, const char*> 
>::result new_obj1; 

typedef join 
< 
    obj2<int, int, double>, 
    obj2<double, char>, 
    obj2<char*, int, double, const char*> 
>::result new_obj2; 

/* This should result in an error, because there are 
    different encapsulating objects 
typedef join 
< 
    obj1<int, int, double>, 
    obj1<double, char>, 
    obj2<char*, int, double, const char*> 
>::result new_obj; 
*/ 

ऊपर के उत्पादन में उम्मीद है कि new_obj1 और new_obj2 रूप में बनाना होगा template<int, int, double, double, char, char*, int, double, const char*> struct new_obj[1|2] {};

मैं विंडोज़ पर जीसीसी 4.6.2 का उपयोग कर रहा हूं, जो "Head<typename TailArgs...>" के विस्तार के लिए "अपेक्षित पैरामीटर पैक से पहले ..." 'आउटपुट करता है ... "।

This error is reproducable with gcc 4.5.1। इस तरह

+0

तर्क * नाम * अंदर 'टेम्पलेट टेम्पलेट तर्क के template' विनिर्देश वैकल्पिक और पूरी तरह से कॉस्मेटिक है, यह वास्तव में वास्तविक पैरामीटर के रूप में उपलब्ध नहीं है। –

+0

@KerrekSB टेम्पलेट टेम्पलेट पैरामीटर के पैरामीटर प्राप्त करने का कोई तरीका है? – kmore

+0

मैंने अपनी पोस्ट संपादित की; मैं वैरैडिक केस लापता था। आपके प्रश्न के उत्तर में: हां, एक स्पष्ट टेम्पलेट पैरामीटर (पैक) और मिलान की आपूर्ति करके। –

उत्तर

18

कोशिश कुछ:

template <typename...> struct join; 

template <template <typename...> class Tpl, 
      typename ...Args1, 
      typename ...Args2> 
struct join<Tpl<Args1...>, Tpl<Args2...>> 
{ 
    typedef Tpl<Args1..., Args2...> type; 
}; 

template <template <typename...> class Tpl, 
      typename ...Args1, 
      typename ...Args2, 
      typename ...Tail> 
struct join<Tpl<Args1...>, Tpl<Args2...>, Tail...> 
{ 
    typedef typename join<Tpl<Args1..., Args2...>, Tail...>::type type; 
}; 
+0

दो ऑब्जेक्ट्स के पैरामीटर को जोड़ते समय यह एक सही समाधान है। हालांकि, मैं वस्तुओं की एक चर संख्या के पैरामीटर गठबंधन करने के लिए देख रहा हूँ। मैंने आपके जवाब [modifying] (http://ideone.com/njBuE) को आजमाया, लेकिन विस्तार पैक के साथ अभी भी एक त्रुटि है। ** संपादित करें: आपने मुझे इसे हराया, धन्यवाद! ** – kmore

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

  • कोई संबंधित समस्या नहीं^_^