【发布时间】:2014-04-30 21:11:23
【问题描述】:
我正在尝试使用本地函数对成员变量类型 std::list 进行排序。由于 C++ 不允许本地函数,因此 Herb Sutter 建议使用本地类,因此我最终得到了以下代码。但我不确定如何将函数指针传递给 std::list::sort() 函数。
void MyClass::UpdateList()
std::map<ClassA*, int> myCustomOrder; //contains order for ClassA objects
class CompareMyClass
{
public:
CompareMyClass(std::map<ClassA*, int>* order) : m_order(order) { }
bool operator()(ClassA *p1, ClassA *p2) {
return m_order->find(p1) < m_order->find(p2);
return false;
}
private:
std::map<ClassA*, int>* m_order;
};
CompareMyClass compareObj(&myCustomOrder); // set the order
// sort the list
m_list.sort(compareObj); // How do I pass a function pointer at this point
}
我得到一个编译器错误
模板参数不能引用本地类型
谢谢
【问题讨论】:
-
你可以试试 C++11 支持吗? C++03 不允许本地类型作为模板参数。
-
我不知道,但 std::sort 可以给出任何想法吗?这里的例子gsamaras.wordpress.com/code/sort-c
-
@juanchopanza:谢谢,C++11 确实支持此代码。
标签: c++ stdlist local-class