मैं वर्तमान में कुछ अज्ञात प्रकार के std::vector::iterators से भरे पैरामीटर पैक में प्रत्येक मान को बढ़ाने का प्रयास कर रहा हूं। मैं वर्तमान में अपने सिर को पाने के लिए संघर्ष कर रहा हूं कि ... सिंटैक्स कैसे काम करता है। मैंने सोचा होगा कि हर मूल्य को बढ़ाना ++input_starts ... होगा, लेकिन यह सिर्फ मुझे एक कंपाइलर त्रुटि देता है। यहाँ संदर्भ के लिए संपूर्ण कार्य है:

template<
    typename RETURN,
    typename ... INPUTS
>
void thread_instance(std::function<RETURN(INPUTS ...)> function,
                     typename std::vector<RETURN>::iterator output_start,
                     typename std::vector<RETURN>::iterator output_end,
                     INPUTS ... input_starts)
{
    for (; output_start != output_end; ++output_start, ++input_starts ...)
    {
        *output_start = function(*input_starts ...);
    }
}
3
finlay morrison 17 अक्टूबर 2020, 04:26

1 उत्तर

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

इसे बदलें:

++input_starts ...

इसके साथ ही:

(++input_starts, ...)

वह C++17 fold अभिव्यक्ति है (आपका उपयोग मामला इसके अनुरूप है उस पृष्ठ पर push_back_vec() उदाहरण)।

सरल डेमो: https://godbolt.org/z/YoY4b1

3
John Zwinck 17 अक्टूबर 2020, 04:33