#include <iostream>
#include <string>
#include <vector>
struct Customer{
Customer(std::string name_):name(name_){}
std::string name;
};
struct CustomerEq{
bool operator() (const Customer& l, const Customer& r) {
return l.name == r.name;
}
};
struct CustomerHash{
size_t operator()(const Customer& c) {
return std::hash<std::string>()(c.name);
}
};
// 使用变成实现多重继承
template<typename... Bases>
struct CustomerOp: Bases... {
// 使用父类的仿函数对象
using Bases::operator()...;
};
void Test(){
CustomerOp<CustomerHash, CustomerEq> cust;
Customer c("ts");
std::cout<<cust(c)<<std::endl;
std::cout<<std::boolalpha<<cust(c, Customer("js"))<<std::endl;
}
int main()
{
Test();
}
变参基类
最新推荐文章于 2024-09-12 23:48:49 发布
该博客探讨了C++中如何使用模板和继承来实现多重继承,并展示了如何结合使用仿函数对象(如`CustomerHash`和`CustomerEq`)进行对象比较和哈希操作。通过`CustomerOp`模板,可以灵活地组合不同的行为。示例代码中展示了如何在实际应用中使用这些概念。
5093

被折叠的 条评论
为什么被折叠?



