C++模板中的函数对象
2024-08-31 02:23:23
在C++模板类map中一个参数为Compare类型,该类型为一个比较函数,其完整定义如下:
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
函数作为类进行传递,该类采用了重载操作符()来实现函数指针到类的转变。在实际中也可以仿照此风格写自己的类。
template <typename Key, typename Value, class Hash >
class A {
Hash hash_fn;
public:
A():hash_fn(Hash()) { } size_t hashCode(Key key) { return hash_fn(key);} };
第三个参数Hash为函数对象,该对象通过重载操作符()来实现,其一个字符串类型的Key定义如下:
struct str_hash {
size_t operator()(const std::string& str) const
{
return ;
}
};
当调用hash_fn(key)函数时,该重载函数被调用,这样就实现了转换。由于C++标准库中包含有大量此类型风格的类,我们就可以通过默认参数来调用标准类,这样上面的模板类A就可以定义如下:
template <typename Key, typename Value, class Hash = std::hash<Key>>
测试程序如下:
int main(int argc, char *argv[]) { A<std::string , int, str_hash> a;
std::cout << "hashCode:" << a.hashCode("abc") << std::endl; A<std::string,int,std::hash<std::string>> h;
std::cout << h.hashCode("abc") << std::endl; A<std::string,int> h2;
std::cout << h.hashCode("abc") << std::endl; return ;
}
测试结果如下:
functiontem
hashCode:
最新文章
- MYSQL-用户操作
- sql索引实例
- pt-query-digest用法
- GIT用法总结
- IIS7 “拒绝访问临时目录”
- change netbeans look and feel
- JAVA8永久代
- editpuls查找替换通配符
- Linux内核是如何创建一个新进程的?
- &;quot;CoolReaper&;quot; --酷派手机后门
- MVC view视图获取Html.RenderAction方式带来的参数
- Git的安装
- IDL 实现求算 DEM 坡度坡向
- springMvc注解之@ResponseBody和@RequestBody
- Linux基础(三)
- Vue.js—组件快速入门以及实例应用
- maven构建geotools应用工程
- Spring MVC (JDK8+Tomcat8)
- 微信小程序开发-tabbar组件
- BN算法