我们都知道您可以通过在函数内定义局部结构/类来模拟 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/