У меня есть шаблонная функция, которая получает функции-объекты. Иногда функции-объекты являются ассемблерными структурами, но иногда они являются большими объектами statefull. Состояние функции-объекта не изменяется в этой функции, а только проверяется. Я также очень хочу писать код, который компилятор может оптимизировать как можно больше. Что следует учитывать при выборе типа аргумента?Каков правильный тип аргумента для объекта-объекта?
Функция этого типа:
template<typename funcT>
auto make_particle(funcT fun) {
Particle<typename funcT::result_type> particle;
particle = fun();
return particle;
}
Аргумент типа, вероятно, следует funcT const & fun
так, что крупные объекты не копируется, но почему большинство людей используют вызов по значению объектов функции? Я что-то теряю, используя ссылку const? Или я должен использовать lvalue-reference? Обратите внимание, что C++ 1y в порядке и что пример кода, приведенный выше, является просто примером.
Вы можете легко решить оба случая с одним эталонным параметром - T &&, aka universal reference. – Xeo
@Xeo: Первоначально я думал о предоставлении единственной * функции *, а не шаблона, поэтому я искал одно решение. Вы правы, конечно, что, поскольку у нас уже есть шаблоны, мы могли бы также использовать их. –