我有一个接收函数对象的模板函数。有时函数对象是无状态结构,但有时它们是大型有状态对象。函数对象的状态在这个函数中没有改变,只是检查。我也非常热衷于编写编译器可以尽可能优化的代码。选择参数类型时应该考虑什么?
该函数属于这种类型:
template<typename funcT>
auto make_particle(funcT fun) {
Particle<typename funcT::result_type> particle;
particle = fun();
return particle;
}
参数类型可能应该是funcT const & fun
这样大对象不被复制,但是为什么大多数人使用按值调用函数对象呢?我是否通过使用 const 引用丢失了一些东西?或者我应该使用左值引用?请注意,c++1y 是可以的,上面的代码示例只是一个示例。