首页
社区
课程
招聘
[求助]C++类模板问题
2018-9-3 23:28 2341

[求助]C++类模板问题

2018-9-3 23:28
2341
请教如何把以下两个方法合并成一个?

这两个函数实现完全一样, 可以使用C++14标准, 谢谢.

	template<typename T>
	ostream& ostream::operator << (ostream& os, const std::set<T>& v);

	template<typename T>
	ostream& ostream::operator << (ostream& os, const std::list<T>& v);


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 217
活跃值: (134)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
扫地sodi 2018-9-3 23:48
2
0
std::is_same
雪    币: 2854
活跃值: (610)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
sidyhe 1 2018-9-4 00:16
3
0
扫地sodi std::is_same
我试了, 但写法上有问题,  有例子吗?
雪    币: 1215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_叛逆的鲁鲁修 2018-9-4 00:39
4
0
  
最后于 2018-9-4 01:19 被wx_叛逆的鲁鲁修编辑 ,原因:
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yezhulove 2018-9-4 10:09
5
0
template<class _It>
ostream& cout_iterator(ostream& os, _It _b, _It _e)
{
       for (; _b != _e; ++_b)
       {
               os << *_b;
       }
       return os;
}

template<typename T>
ostream& operator << (ostream& os, const std::set<T>& v){
       return  cout_iterator (os, begin(v), end(v));
}

template<typename T>
ostream& operator << (ostream& os, const std::list<T>& v){
       return  cout_iterator (os, begin(v), end(v));
}

最后于 2018-9-4 10:17 被yezhulove编辑 ,原因:
雪    币: 2854
活跃值: (610)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
sidyhe 1 2018-9-4 10:19
6
0
yezhulove template&lt;class&nbsp;_It&gt; ostream&amp;&nbsp;cout_iterator(ostream&amp; ...
感谢, 例子我没有测试, 因为这与我的目的不符, 我希望的是相似容器使用同一份模板实现.
雪    币: 2854
活跃值: (610)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
sidyhe 1 2018-9-4 11:19
7
0
这样应该可以了, 搭配std::enable_if即可, 感谢楼上各位的帮助

template<template<typename...> typename T, typename... V>
std::ostream& foo(std::ostream& os, T<V...> &v)
{
	std::size_t sz = v.size();

	foo(os, sz);
	for (auto i = std::begin(v); i != std::end(v); ++i)
	{
		foo(os, *i);
	}

	return os;
}

支持处理set/list/deque/vector等容器类型

游客
登录 | 注册 方可回帖
返回