关键信息和注意事项:

  1. UFCS是一种语法糖,允许对对象执行函数调用,而不需要将对象作为函数的第一个参数传递。
  2. UFCS可以应用于任何函数或方法,而不仅仅是成员函数。
  3. UFCS可以在模板中使用,使得泛型编程更加方便。
  4. UFCS的语法为"."后跟函数名,例如:obj.function()可以写成obj.function。
  5. UFCS的语法允许使用函数名来表示成员函数,例如:obj.function可以写成function(obj)。
  6. UFCS的语法也允许使用模板函数来表示成员函数,例如:obj.function可以写成function!(obj)。

以下是两个完整可以运行的代码实例:

例1:

struct Point {
    int x, y;
    this(int x, int y) { this.x = x; this.y = y; }
    Point opAdd(Point other) { return Point(x + other.x, y + other.y); }
    Point opSub(Point other) { return Point(x - other.x, y - other.y); }
}

void main() {
    Point a = Point(1, 2);
    Point b = Point(3, 4);
    Point c = a.opAdd(b);  // 使用成员函数调用
    writeln("c = ", c.x, ", ", c.y);

    Point d = a + b;  // 使用UFCS调用
    writeln("d = ", d.x, ", ", d.y);
}

例2:

template add(T) {
    T add(T a, T b) { return a + b; }
}

void main() {
    int a = 1;
    int b = 2;
    int c = add(a, b);  // 使用模板函数调用
    writeln("c = ", c);

    c = a.add(b);  // 使用UFCS调用
    writeln("c = ", c);
}
``

原文地址: https://www.cveoy.top/t/topic/e9fa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录