C++ 闭包和模板

标签 c++ closures

我们都知道您可以通过在函数内定义局部结构/类来模拟 C++98 中的闭包。但是有什么原因导致本地定义的结构不能用于实例化本地范围之外的模板吗?

例如,如果能够做这样的事情会非常有用:

void work(std::vector<Foo>& foo_array)
{
    struct compareFoo
    {
       bool operator()(const Foo& f1, const Foo& f2) const
       {
         return f1.bar < f2.bar;
       }
    };

    std::sort(foo_array.begin(), foo_array.end(), compareFoo());
}

如果您知道不需要在代码中的其他任何地方使用 compareFoo,这将特别有用。但是,唉,这不能编译。是否有某种原因导致编译器无法使用本地定义的结构实例化 std::sort 模板函数?

最佳答案

没有比“标准不允许”更好的理由了。

我相信C++0x会解除这个限制,让你可以自由使用本地类作为模板参数。但目前,这是不允许的。

关于C++ 闭包和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1447199/

相关文章:

c++全局变量超出类范围

c++ - 如何使用 C++ 创建一个工具来解析 XML 文件

c++ - XML 与硬编码接口(interface)?

javascript - 如果我们想在柯里化(Currying)中保留一个值,javascript 的闭包如何工作

c++ - 查找 std::vector 中的最后一个非零元素

C++ 从另一个 Win32 应用程序获取 GDI 原始文本

python - 如何序列化递归函数?

swift - 在 Swift 中捕获值

swift - 在方法参数中隐式解包可选闭包

javascript - 原型(prototype)函数调用返回未定义