0

我编写了一个类,它从外部文件中读取数据,操作数据,然后进行计算。

类很长,尤其是构造函数。这是我从外部文件中读取数据并对其进行操作以准备计算的地方。我使用模板函数来做到这一点。

我知道将班级分开会更好,但我将它与我无法更改的商业代码结合使用。另外,需要使用代码的人需要它是一类+辅助文件,所以我仅限于这一类。为了使代码更具可读性,我想将构造函数中的一些代码存储在名为“auxiliary.h/.cpp”的辅助 .cpp/.h 文件中,并通过函数访问它。

这是问题所在:

1) 将模板函数(类的成员函数)作为函数参数传递给辅助文件。我不能这样做,尽管我听说这可能通过一种叫做“消歧”的方式来实现。传递非模板函数和向量之类的东西是没有问题的……模板函数是问题所在。

2) 此外,即使我可以将模板函数作为参数传递给访问辅助文件的函数,我的参数列表也会很长。

我想知道的是,有没有办法让辅助文件“看到”类?我尝试将类的实例作为参数/参数传递给在辅助文件中执行操作的每个函数。但这会导致“instanceName 未在此范围内声明”,并且看起来确实是一种相当循环/复杂的方法。

任何建议将不胜感激。谢谢。

4

2 回答 2

4

我知道将班级分开会更好,但我将它与我无法更改的商业代码结合使用......

我可能缺少有关您的具体情况的更多背景知识,但是无论您使用什么第三方代码,您都应该能够使用您编写的代码做任何您想做的事情,听起来您写了很多。

你意识到你的班级太大了,所以下一步是将它分成单独的、更有凝聚力的班级。尝试创建其他文件/函数来简单地修改一个已经很大的类的内部状态,这会使代码变得更大,并且你会比现在更多地把它变成意大利面条。

如果第三方库需要使用您编写的单个类进行操作,请查看 Facade 设计模式。您可以轻松地在外部拥有“看起来像”的复杂类,但在内部它只是将工作委托给任何数量的更专业的类。

如果您希望一个类可以访问第三方库,您也可以这样做。看看诸如适配器设计模式之类的东西。

我可以提供的另一个建议是拿起这本关于重构的书。它将向您展示如何处理任何看起来过于复杂的代码,并有条不紊地应用步骤以使其更具可读性和可维护性。例如,看看您的数据成员,它们中的任何一个看起来是否属于一个组(即它们经常一起访问/修改)?如果是,请考虑将它们移动到自己的类中,该类提供最小的接口,仅用于获取/设置您的主类需要的内容。

这篇文章没有回答您的具体问题,但退后一步,也许有比仅仅因为一些可能并不存在的限制而打破 OO 规则和良好设计原则更好的解决方案。

于 2011-10-15T08:22:46.843 回答
0

您可能可以创建一个模板辅助类而不是辅助函数,将指向您的第一个(大)类的指针传递给它?

于 2011-10-15T08:10:09.953 回答