(我找到了这个问题的部分答案here,但问题仍然存在)
在C ++中你有这个讨厌的'特性',尽管在类定义之外定义了函数,你仍然必须在类中声明它。它有它的优点,但仍然非常烦人,因为除了透明代码之外我还想拥有很多辅助功能,而不需要在最终的API中显示它们。
我理解面向对象的C ++的设计不允许它(可能有一些疯狂的指针到函数的方式,如果你知道的话,我也想知道它:D),但我很感兴趣是否有任何流行的编程语言能够在类体外声明/定义函数。当然我知道其他方式(只保持每个变量公开),但它不允许我们在不更改只读标头的情况下对现有API进行操作。
问题示例(来自虚幻引擎):
FVector a(1,2,3), b(3,4,5);
float c1 = FVector::DotProduct(a,b);
//but...
float c2 = a.Dot(b);
//method doesn't exist. I have to make new child class inheriting from FVector
//to actually be able to use simple .Dot method
答案 0 :(得分:1)
在C#中,一个类可以跨越多个文件。此功能称为部分类。您可以使用部分类来:
示例(摘自MSDN)
public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}
需要使用partial关键字标记类的所有部分。这意味着您只能扩展其作者要扩展的类。这可以确保原始开发人员能够控制他的课程(例如抽象,密封......)
答案 1 :(得分:1)
据我所知,你可以在C#(部分类),Objective-C(扩展+类别),Swift(扩展)中做到这一点。 你也可以在C ++中做一些变通方法,你可以定义辅助类,它将包含你不希望在公共API中显示的所有函数(如果需要,不要忘记把它变成朋友类)在公共类中存储指向此类实例的指针。使用这种方法,您甚至没有义务将带有辅助类接口的头包含在您的公共类头中(前向声明就足够了)并且可以在某处隐藏它。您只需要在实现文件中使用该标头。