Шаблонный конструктор вызывается вместо перегруженного оператора присваивания при присваиванииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Шаблонный конструктор вызывается вместо перегруженного оператора присваивания при присваивании

Сообщение Anonymous »


Я пытаюсь написать свою собственную функцию inplace_function и столкнулся со странной проблемой, когда при присваивании вызывался шаблонный конструктор, а не оператор присваивания. Я не уверен, связано ли это с разрешением перегрузки или чем-то еще. Вот код, который поможет вам понять еще больше:
Шаблон
класс inplace_function; шаблон требуется std::is_invocable_r_v класс inplace_function { публика: используя result_type = R; inplace_function() = по умолчанию; шаблон inplace_function(Func&& func) noException { // инициализация } ~inplace_function() noException { // код уничтожения } шаблон требуется std::invocable inplace_function& оператор=(Func&& другое) noException { // логика присваивания вернуть *это; } частный: // данные }; Тестовый код:

int Multiple(int x, int y) { вернуть х * у; } структура Добавить { int оператор()(int x, int y) const { вернуть х + у; } }; структура Фу { int add(int x, int y) const { вернуть х + у; } }; inplace_function func(&Foo::add); inplace_function func1(multiply); inplace_function func2([](int x, int y) { return x + y; }); inplace_function func3; функ3 = функция; inplace_function func4; константа Фу Фу; ПРОВЕРКА(func1(3, 3) == func(foo, 3, 6)); ПРОВЕРИТЬ(func2(0, 9) == 9); ПРОВЕРИТЬ(func3(foo, 0, 9) == 9); func4 = [](int a, int b) { return a + b; }; ПРОВЕРИТЬ(func4(6, 3) == 9); func4 = умножить; ПРОВЕРИТЬ(func4(3, 6) == 18); func4 = Добавить {}; ПРОВЕРИТЬ(func4(8, 1) == 9); func2 = умножить; ПРОВЕРКА(func2(0, 9) == 0); Оператор присваивания не вызывался ни разу. Я знаю о возможности копирования, но не думаю, что это играет роль в моем сценарии.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»