D 有可能专门化可变的同名模板吗?

D 有可能专门化可变的同名模板吗?,d,D,我想扩展它,这样它也可以用于我的向量类型 例如,两个向量的min应返回由两个向量的最低值组成的新向量。 自动最小值(向量…)(向量v中){ 静态导入标准算法比较; 返回componentMap!(std.algorithm.comparison.min)(v); } 自动最大值(矢量…)(矢量v){ 静态导入标准算法比较; 返回componentMap!(std.algorithm.comparison.max)(v); } 似乎我无法扩展min。如果两个min在同一范围内,则D将只选择st

我想扩展它,这样它也可以用于我的向量类型

例如,两个向量的
min
应返回由两个向量的最低值组成的新向量。

自动最小值(向量…)(向量v中){
静态导入标准算法比较;
返回componentMap!(std.algorithm.comparison.min)(v);
}
自动最大值(矢量…)(矢量v){
静态导入标准算法比较;
返回componentMap!(std.algorithm.comparison.max)(v);
}

似乎我无法扩展
min
。如果两个
min
在同一范围内,则D将只选择
std.algorithm.comparison.min
,它将无法编译。是否可以专门化
min
模板,以便如果D找到只包含向量的
min
模板,它将调用正确的min模板?

std.algorithm.min
没有任何模板约束(至少没有任何约束) 在此处很有用),因此如果在 当前范围。但是,如果尚未导入
min
,则可以编写包装器 像这样:

奇怪的是,如果我
导入标准算法比较
但如果我
import std.algorithm.comparison:min,这可能是一个错误


但是,我认为您的
min
与正常的
min
行为(而不是返回其中一个元素,而是返回它们的一些组合)相差太远,因此只给它取一个不同的名称可能是有意义的。

您看到了什么错误?对我来说,上面的
min
签名与
std.algorithm.min
没有冲突。哦,奇怪。它实际上覆盖了我的std.algorithm.min。。。那不是我所期望的。
min(Vec2(5,10), Vec2(-1, 15)) == Vec2(-1, 10)
enum isVector(T) = is(T == Vec2);

auto min(T...)(T args) {
    static import std.algorithm.comparison;

    static if (allSatisfy!(isVector, T))
            // return vector min
    else
        return std.algorithm.comparison.min(args);
}