Сообщение Re: Передача объекта, возвращаемого функцией, в другую функц от 26.09.2019 18:46
Изменено 26.09.2019 18:50 rg45
Re: Передача объекта, возвращаемого функцией, в другую функцию.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Есть интерфейс t_errors.
КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:
КД>
КД>Теперь есть утилита, работающая с t_errors:
КД>
КД>Она вызывается приблизительно так:
КД>
КД>Все компилируется (VC++) и работает как и ожидается.
КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.
Да добавь просто перегрузку для rvalue ссылки и всех делов:
КД>Есть интерфейс t_errors.
КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:
КД>
КД>t_errors_without_limits get_errors_without_limits();
КД>t_errors_with_limits get_errors_with_limits();
КД>
КД>Теперь есть утилита, работающая с t_errors:
КД>
КД>void add_current_errors(t_errors& errs); //errs внутри не запоминается.
КД>
КД>Она вызывается приблизительно так:
КД>
КД>add_current_errors(ctx.get_errors_without_limits());
КД>//...
КД>add_current_errors(ctx.get_errors_with_limits());
КД>
КД>Все компилируется (VC++) и работает как и ожидается.
КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.
Да добавь просто перегрузку для rvalue ссылки и всех делов:
void add_current_errors(t_errors& errs); //errs внутри не запоминается.
void add_current_errors(t_errors&& errs) { add_current_errors(errs); }
Re: Передача объекта, возвращаемого функцией, в другую функц
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Есть интерфейс t_errors.
КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:
КД>
КД>Теперь есть утилита, работающая с t_errors:
КД>
КД>Все компилируется (VC++) и работает как и ожидается.
КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.
Да добавь просто перегрузку для rvalue ссылки и всех делов:
КД>Есть интерфейс t_errors.
КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:
КД>
КД>t_errors_without_limits get_errors_without_limits();
КД>t_errors_with_limits get_errors_with_limits();
КД>
КД>Теперь есть утилита, работающая с t_errors:
КД>
КД>void add_current_errors(t_errors& errs); //errs внутри не запоминается.
КД>
КД>Все компилируется (VC++) и работает как и ожидается.
КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.
Да добавь просто перегрузку для rvalue ссылки и всех делов:
void add_current_errors(t_errors& errs); //errs внутри не запоминается.
void add_current_errors(t_errors&& errs) { add_current_errors(errs); }