определить псевдоним шаблона функции с помощью - PullRequest
0 голосов
/ 29 января 2020

Я определяю псевдоним шаблона функции:

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

, но получил эту ошибку:

ошибка: невозможно преобразовать 'Log :: operator () (Read &) [с T = int] :: 'to' Cb '{aka' void (*) (bool, int) '} в назначении

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;
}

кому разрешить эту синтаксическую ошибку?

пример кода

1 Ответ

0 голосов
/ 29 января 2020

Проблема в том, что

std::function<Cb<T>> разрешается до std::function<void (*)(bool, int)>, тогда как вы хотите

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

Так что вы можете изменить свой псевдоним на

template <typename T>
using Cb = void(bool, T);
...