已经提出了C++"委托"的建议,其开销低于boost::function:
是否已将这些想法用于实施std::function,从而产生更好的性能boost::function?有谁比较过std::functionvs 的表现boost::function?
我想知道这个特别适用于英特尔64位架构上的GCC编译器和libstdc ++,但欢迎其他编译器的信息(例如Clang).
我想使用lambda作为自定义比较器std::map但不幸的是Visual Studio 2013编译器不允许使用这样的简单代码:
auto cmp = [](int l, int r) { return l < r; };
std::map<int, int, decltype(cmp)> myMap(cmp);
myMap[1] = 1;
Run Code Online (Sandbox Code Playgroud)
并失败了
错误C3497:您无法构造lambda的实例
似乎此代码在GCC 5.1和Visual Studio 2015中正常工作(使用ideone和VC++在线编译器进行检查 ).但对于VS2013,其中一个解决方案是使用此处提出的参考(注意auto&):
auto& cmp = [](int l, int r) { return l < r; };
std::map<int, int, decltype(cmp)> myMap(cmp);
myMap[1] = 1;
Run Code Online (Sandbox Code Playgroud)
很明显,由于绑定非const引用到临时,GCC不编译这个,而VS2015发出关于使用非标准扩展的警告.也可以使用const引用,但是下面的代码将不会编译(注意可变 - 我通过使用有状态比较器来扩展它):
int compCounter = 0;
const auto& cmp = [&compCounter](int l, int r) mutable { ++compCounter; return …Run Code Online (Sandbox Code Playgroud)