मैं एक फ़ंक्शन टेम्पलेट उपनाम परिभाषित करता हूं:

template <typename T>
using Cb = typename std::add_pointer<void(bool, T)>::type;

लेकिन यह त्रुटि मिली:

त्रुटि: असाइनमेंट में 'लॉग :: ऑपरेटर () (पढ़ें और) [टी = इंट] ::' से 'सीबी' {उर्फ 'शून्य (*) (बूल, इंट)'} में कनवर्ट नहीं कर सकता

template <typename T>
class Log : public Sink<T> {
public:
    void
    operator()(Read<T> &read) {
        if (!more_) {
            // error !!!
            more_ = std::function<Cb<T>>([&](bool done, T val) {
                if (!done) {
                    cout << val << endl;
                    this->operator()(read);
                }
            });
        }
        read(false, more_);
    }

private:
    Cb<T> more_ = nullptr;
};

मुख्य कार्य:

int main() {

    Log<int> logInt;

    return 0;
}

इस सिंटैक्स त्रुटि को कौन हल करे?

कोड उदाहरण

0
langyu 29 जिंदा 2020, 09:19

1 उत्तर

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

मुद्दा यह है कि

std::function<Cb<T>> जब तक आप चाहें, std::function<void (*)(bool, int)> का संकल्प लें

std::function<void (bool, int)>.

तो आप अपना उपनाम बदल सकते हैं

template <typename T>
using Cb = void(bool, T);
0
Jarod42 29 जिंदा 2020, 12:20