|
|
1
4
你可以申报
this demo 来验证它是否有效。
我引入了一个公共基类,它为所有迭代器声明了必要的朋友。因此,与您尝试声明标记不同,您只需从
更新:
因此,不能利用公共基类来签名
但是,请注意,如果您的迭代器碰巧有一些要在实现中使用的公共成员(是否派生自某个公共基类并不重要)
here 它是如何工作的。
自今(非朋友)
|
|
|
2
3
一种可能的解决方案是使用另一个函数模板名称和类型鉴别器,允许参数相关名称查找在参数的命名空间中查找关联函数:
|
|
|
3
2
这似乎满足了您的要求:
基本上,这取决于日常生活能力。如果ADL未找到任何函数,则将使用
因此,如果你这样做:
然后
如果您这样做:
然后
|
|
|
4
2
在C++ 11中,可以使用标签调度。如果您可以对自定义迭代器进行一些更改,那么实现起来就会简单一些。
接下来,我们定义一个类型,允许我们访问这个
最后,我们只需要为每个标记实现一个复制函数(我调用了它)
Here 这是一个活生生的例子。
如果将代码移动一点,就可以断开名称空间
|
|
|
5
1
好的,在@paler123上构建,但不检查现有类型,但检查是否
一般来说,您的问题是一个设计问题。你想用
|
|
|
6
1
(这些注释现在集成在我对@sebrockm答案的编辑中)
它不是很好,因为它需要把所有的东西都包起来
|
|
|
7
-2
建议您看一看功能强大的新款 Boost.HOF 此函数完全满足您的要求:
|