C++:始终重新格式化输入参数的最佳方式



如果标题太笼统,我很抱歉,但我不知道如何用不同的措辞。这是我的问题:

目标是拥有包装类,以便使用具有相同通用API的不同库。我有一个抽象类,它定义了所有可能的计算。然后,我有几个子类,它们使用不同的库来实现这种计算(一个类只使用一个特定的库(。

对于许多此类方法,有一个论点是Eigen::VectorXd,现在对于其中一个库,这个向量需要与其他向量不同地排列。

所以基本上,对于一个孩子类,我需要在很多方法中写这样的东西:

void ChildB::computeXXXX(const Eigen::VectorXd &A, unsigned int b,const Eigen::Vector3d &c)
{
const Eigen::VectorXd A_formatB = convertToChildB(A);
libraryB::computeXXX(A_formatB, b, c)
// do stuff
//....
}

当这个参数从类内部传递给类的其他方法时,也会变得有点棘手,我需要注意始终使用好的格式。正如你所看到的,我天真的解决方案可能会导致很多错误和头痛。所以我的问题是:有没有一种智能/自动的方法可以做到这一点?像所有人一样调用库B::something I want the argument named"A";(它总是同一个名字(被重新安排之前。

编写代码,保留数据的格式和布局。所以这是代码的责任。但是,您可以通过使用例如decorator模式来减少它的错误倾向。

您将转换代码放入decorator中。它允许基础结构服务代码远离主逻辑。在后台使用不同库的类接受特定格式的数据。对于客户端代码,您可以使用特定的装饰器来装饰特定的对象。

您可以将工厂方法添加到接口中,以多态的方式创建与特定类型的对象相关联的特定装饰器。

最新更新