我有一个没有成员变量的仿函数.我想知道根据需要动态创建这个仿函数是否更有效,或者将其作为成员变量缓存.关于空基类优化和缓存局部性存在一些我不确定的问题.
struct Foo
{
int operator()(const MyData& data) const { ... }
};
Run Code Online (Sandbox Code Playgroud)
对于空对象,只需在堆栈中创建它.将仿函数作为成员添加到您的类型将使您的所有对象更大.将其添加为基础(以利用空基础优化)将产生一种奇怪的设计,其中您的类型operator()(const MyData&)无缘无故地实现.即使您将其设为私有,运营商也会在那里.
由于类型没有成员,因此没有缓存局部性问题,因为没有要访问的数据.无状态函子的主要用途是允许编译器内联对函数的调用(与具有相同名称的自由函数相比)