addOperator(KeyCode key, Lambda lambda);
И вызов:
operatorDispatcher.addOperator(KeyCode::Delete, std::make_unique<DeleteFaceOperator>());Где DeleteFaceOperator - наследник Operator.
Я предполагаю, что должен быть вызван первый метод, компилятор же пытается вызвать второй.
Что я делаю не так и как это исправить?
unique_prt-у надо делать move.
код объявления DeleteFaceOperator
При этом вызов operatorDispatcher.addOperator(KeyCode::Delete, std::make_unique<Operator>()); т.е. непосредственно с указанным типом, а не наследником, выбирает верную перегрузку
Не понимаю, почему компилятор предпочитает выбирать вариант с шаблонным параметром вместо конкретного. Есть где-то описанный в стандарте алгоритм как компилятор должен выбирать метод для перегрузки, в т.ч. с такими случаями?
Второй аргумент первого метода должен быть rvalueref, && добавь
Обсуждают сегодня