C ++: передача неподвижного функтора в std :: function

Параметрированные вызовы методов полезны, если вы хотите разрешить разные типы без кастования. Например, вспомогательный класс Collections широко использует вызовы параметризованных методов. Если вы хотите создать новую общую коллекцию, используя один из своих вспомогательных методов, несколько примеров:

List anEmptyStringList = Collections.emptyList();
Set unmodifiableCopy = Collections.unmodifiableSet(originalSet);

Итак, если вы хотите использовать общий тип в другом месте, вы хотите использовать эти вызовы методов. Они предотвращают предупреждения компилятора при использовании дженериков.

0
задан xworder 18 January 2019 в 12:17
поделиться

1 ответ

template<class F>
auto shared_function( F&& f ){
  auto spf=std::make_shared<std::decay_f<F>>(std::forward<F>(f));
  return [spf=std::move(spf)](auto&&...args)->decltype(auto){
    return (*pf)(decltype(args)(args)...);
  };
}

владеет им в общем ptr. Немного меняет семантику, но исправляет ее.

Или напишите свою собственную функцию non-copyd std.

0
ответ дан Yakk - Adam Nevraumont 18 January 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: