Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 松散类耦合与数据访问_C++_Oop_Loose Coupling - Fatal编程技术网

C++ 松散类耦合与数据访问

C++ 松散类耦合与数据访问,c++,oop,loose-coupling,C++,Oop,Loose Coupling,我试图实现一个复杂的类,它的构造需要一个条件的规范,这个条件允许构造函数确定对象何时被构造。例如,考虑: class RigidBody { private: std::vector<double> trajectory_; // Other stuff... public: RigidBody(std::unique_ptr<TerminateCondition>, std::vector<doubl

我试图实现一个复杂的类,它的构造需要一个条件的规范,这个条件允许构造函数确定对象何时被构造。例如,考虑:

class RigidBody
{
    private:
        std::vector<double> trajectory_;
        // Other stuff...
    public:
        RigidBody(std::unique_ptr<TerminateCondition>, std::vector<double> const &);
        // Other stuff...
};
类刚体
{
私人:
向量轨迹;
//其他东西。。。
公众:
刚体(std::unique_ptr,std::vector const&);
//其他东西。。。
};
以下是构造函数的外观:

RigidBody::RigidBody(std::unique_ptr<TerminateCondition> condition, std::vector<double> const &p)
{
    int n = 0;
    while(!condition->Done( /* Signature */))
    { n++; 
      /* Do other stuff... */ 
      // such as, trajectory_.push_back(sin(n * dt));
    }
}
RigidBody::RigidBody(std::unique_ptr条件,std::vector const&p)
{
int n=0;
而(!条件->完成(/*签名*/))
{n++;
/*做其他事情…*/
//例如,轨迹推后(sin(n*dt));
}
}
我把
TerminateCondition
想象成一个抽象类

需求1:访问
刚体
成员

我希望
类TerminateConditionatTest:public TerminateCondition
能够使用
轨迹
,这样我就可以在诸如
std::abs(traction.back()-轨迹0])Done(…)
向量常量&
作为输入参数并将
轨迹
传递给它

Demand 2:灵活性,签名为
Done(…)

我可能希望
class TerminateConditionNumSteps:public TerminateCondition
n>1000时标记
Done
,或者类似的东西。基本上,我可以使用一些灵活性,其中的
/*签名*/

如何实现这样的设置,其中
TerminateCondition->Done
可以使用
刚体
构造函数范围内可用的各种变量集,例如
轨迹
之类的私有成员或
n
之类的局部变量

我只是在寻找建模循环终止条件的终极灵活性。抽象类似乎不允许灵活地使用输入参数签名。另一方面,抽象类似乎是唯一允许我在运行时指定条件的东西


谢谢。

这只是我的想法。也许你想用这样的东西

class TrajectoryCreator
{
public:
   virtual vector<float> create(const vector<float>& path) = 0;
}
class TrajectoryCreator
{
公众:
虚拟向量创建(常量向量和路径)=0;
}
然后,您可以创建所需的特定轨迹:

RigidBody( TrajectoryCreator& t, const vector<float> &p)
  : trajectory_(t.create(p))
{}
刚体(轨迹生成器&t、常量向量&p)
:轨迹(t.create(p))
{}

此解决方案的主要思想是在单独的类中创建轨迹的移动逻辑,涉及1:您也可以传递一个工厂对象,该工厂对象将从
创建
刚体
中的正确条件,即具有完全
刚体
访问权限(即
公共
)关于2:使用一个抽象的基本条件基本上说:“我们是否完成,将根据下面的签名来确定”。如果你不想这样,也许你需要一个轨迹工厂,它会自动决定是否完成。最后,一般来说:似乎你有一个界面(
刚体
),它的结构你不想分离/模块化。为什么不这样做呢?精确地说:添加类
RigidBodyConstructionInfo
,根据该类可以构造
RigidBody
。反过来,
RigidBodyConstructionInfo
可以从一些工厂接口构建,这些工厂接口的实现可能依赖于运行时的内容。