Я пытаюсь избежать повторяющегося кода, имея функцию для создания ClientContexts.Компилируется следующий код:
template<typename T>
grpc::ClientContext&& context_with_deadline(T duration) {
grpc::ClientContext context;
auto deadline = std::chrono::system_clock::now() + duration;
context.set_deadline(deadline);
return std::move(context);
}
Он не компилируется без указания типа возвращаемого значения как ссылки на rvalue или без явного указания std :: move (я использую C ++ 11, поэтому я считаю, что RVO и ellision копирования негарантировано).
В какой-то другой области я сейчас пытаюсь сделать это, которое не компилируется:
grpc::ClientContext stream_context = context_with_deadline(std::chrono::milliseconds(3000));
Он пытается создать временный объект и скопировать его в stream_context
, что нельзя сделать, потому что конструктор копирования ClientContext
является личным (не удален).
Есть ли способ сделать это без использования unique_ptr
?Если нет, можно ли это считать ошибкой?(кажется, что конструктор копирования должен быть удален, а не закрытым).
Примечание: когда я говорю «не компилируется», это означает, что компилятор выдал следующее:
ошибка: 'grpc :: ClientContext :: ClientContext (const grpc :: ClientContext &)' является закрытым в этом контексте