gpt4 book ai didi

c++ - typedef 函数不是类型名?

转载 作者:行者123 更新时间:2023-11-30 01:44:08 25 4
gpt4 key购买 nike

这是我在 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;

关于c++ - typedef 函数不是类型名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36746357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com