![]() |
1
3
正如Litb所说,ADL在其工作的地方是优越的,这基本上是从调用参数推导模板参数的时候:
输出:
重载+adl通过部分专门化函数模板来实现您想要的效果
所以问题是,您希望库的用户必须为什么部分地专门化您的函数模板?如果他们要专门化类型(通常是算法模板的情况),请使用ADL。如果他们要专门化整型模板参数,比如在您的示例中,那么我猜您必须委托给一个类。但我通常不希望第三方定义乘3应该做什么-我的库会做。 全部的 整数。我可以合理地期望第三方定义 octonion 会的。
想想看,求幂可能是一个更好的例子,因为我
我认为ADL有一个缺点——它有效地扁平了名称空间。如果我想使用ADL“实现”两者
我的意思是:
现在,我有一种类型
我还想利用std::swap-style adl编写自己的sandwich::sub实现:
等一下。我不能那样做,是吗?具有相同参数和不同返回类型的不同命名空间中的两个不同函数:通常不是问题,这就是命名空间的用途。但我不能告诉他们两个。可能我错过了一些非常明显的东西。
顺便说一句,在这种情况下,我可以完全专业化
|
![]() |
2
1
如果您正在编写一个库以供其他人或其他人使用,请执行结构/类操作。这是更多的代码,但你的库的用户(可能是未来的你!)会谢谢你的。如果这是一个使用代码,那么失去部分专门化不会对您造成伤害。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |