मेरे पास निम्न टेम्पलेट वर्ग है जहां मैं टेम्पलेट प्रकारों के माध्यम से साइकिल चलाना चाहता हूं और प्रत्येक प्रकार के लिए कुछ करना चाहता हूं। यह एक सरलीकृत उदाहरण है।

template<class... T>
class Handler
{
private:
    template<class A>
    void Do1_(int a, int b)
    { 
       A obj{};
       obj.Process(a, b);
    }

    template<class A, class... B>
    void Do_(int a, int b)
    {
        Do1_<A>(a, b);
        Do_<B...>(a, b);
    }
public:
     void Do(int a, int b)
    {
       Do_<T...>(a, b);
    }
};

struct Foo1 {
   void Process(int a, int b) {}
};
struct Foo2 {
   void Process(int a, int b) {}
};    
class Bar : public Handler<Foo1, Foo2> {};

लेकिन Do_<B...> के लिए विस्तार मुझे परेशानी देता है, मुझे Do_<B...> को संकलित करते समय "ए' के ​​लिए टेम्पलेट तर्क को कम नहीं कर सका" के बारे में संकलन त्रुटि मिलती है। यदि संभव हो तो इसे संकलित करने के लिए यहां सही विस्तार क्या होना चाहिए।

-2
thorsan 10 जुलाई 2018, 16:47

1 उत्तर

सबसे बढ़िया उत्तर

आप अति जटिल मामले हैं। यह करना चाहिए (कोई सज़ा का इरादा नहीं):

template<class... T>
class Handler
{
public:
    void Do(int a, int b) {
       int dummy[] = {(T{}.Process(a, b), 0)...};
    }
};

डेमो

0
Igor Tandetnik 10 जुलाई 2018, 17:09