这是我在myCode.h
中的代码:
#include <set>
using namespace std;
bool MyObjectComp(const MyObject& lhs, const MyObject& rhs) {
return lhs.mTick < rhs.mTick;
}
typedef std::multiset<MyObject, MyObjectComp> MyObjectMultiSet;
但是它说函数
MyObjectComp
不是类型名称。我应该放在哪里? 最佳答案
std::multiset
的模板参数需要一个类型,MyObjectComp
不是类型,而是函数名称。您可以使用decltype
来获取其类型,例如
typedef std::multiset<MyObject, decltype(MyObjectComp)*> MyObjectMultiSet;
或者您可以自己指定类型
typedef std::multiset<MyObject, bool(*)(const MyObject&, const MyObject&)> MyObjectMultiSet;
还要注意,函子/ lambda通常比使用函数更有效,因为编译器可以更轻松地优化代码。我建议使用
struct MyObjectComp {
bool operator()(const MyObject& lhs, const MyObject& rhs) {
return lhs.mTick < rhs.mTick;
}
};
typedef std::multiset<MyObject, MyObjectComp> MyObjectMultiSet;
要么
auto MyObjectComp = [](const MyObject& lhs, const MyObject& rhs) {
return lhs.mTick < rhs.mTick;
};
typedef std::multiset<MyObject, decltype(MyObjectComp)> MyObjectMultiSet;