C++中的函数对象是一个支持重载运算符()的类。这是否与范畴论中的函数子相同?它们的对象和态射是什么?
C++中的函数对象是一个支持重载运算符()的类。这是否与范畴论中的函数子相同?它们的对象和态射是什么?
category Shape;
category Rectangle : forgetful functor Shape;
category Polygon : forgetful functor Shape
{
functor Polygon( Rectangle & );
};
class Shape;
class Rectangle : public Shape;
class Polygon : public Shape
{
implicit Polygon( Rectangle & );
};
遗憾的是,发明面向对象编程的人和发明范畴论的人不是同一批人,因此使用的术语不同。
不。
我认为最不容易引起混淆的方式来称呼C++中的“functors”是“function object”。
在Java中,我猜一个带有调用运算符的对象被称为“callable”,但在C++中,它具有稍微更广泛的含义,包括任何函数指针或其他可以使用“call”语法的东西。
这只是数学中某些技术术语被计算机科学家用来表示与其原始含义基本无关的事物的例子之一。例如,“网络拓扑”这个词,人们用它来描述网络的布局。这实际上与“拓扑”的数学含义没有什么关系,后者关注于在任意连续变换下保持不变的空间属性。也就是说,“一个拓扑学家是一个不能分辨咖啡杯和甜甜圈的数学家”。通常,在我看来,对于人们谈论计算机网络所关心的大多数目的,讨论计算机网络的“网络几何”会更有意义,因为他们关心的事情包括节点之间的距离、密度、瓶颈等,这些大多数不是拓扑性质。但这只是我的小抱怨。 :)