c++ - 减少重复的方法?

标签 c++ oop class friend

所以我正在开发一个 2D 空间模拟器,我有资源管理器“calc”来处理所有的所有计算。例如,来自 calc.hpp :

var calc::eccentricity (object A, object B);
var calc::distance     (object A, object B);
var calc::orbitV       (object A, object B);

等但是,我构建程序的方式是在我的 calc 类中

private:
object *ship    //the currently controlled ship
object *targ    //target
object *ref     //reference (from which speeds, position, etc. are calculated)

为了使用第一个示例中给出的计算,我为每个计算函数编写了三个函数,如下所示:

var calc::ship_ecc      (object A){
    if(!ship)    //catches null pointers
        return NAN;
    return eccentricity(*ship, A);
}

var calc::ship_ref_ecc  (){
    if(!ref)    //catches null pointers
        return NAN;
    return ship_ecc(*ref);
}

var calc::ship_targ_ecc (){
    if(!targ)   //catches null pointers
        return NAN;
    return ship_ecc(*targ);
}

eccentricity,然后是 distanceorbitV。所以我最终每次计算都有四个函数。从calc.hpp可以看出这会产生大量重复代码。重复的代码是一件坏事。

我的问题是什么

有什么方法可以调用

calc.ship.targ.eccentricity();
calc.ship.ref.eccentricity(); //or variation thereof

calc.ship.targ(eccentricity);
calc.ship.ref(eccentricity);  //or variation thereof

代替

calc.ship_targ_ecc();
calc.ship_ref_ecc();

?我想知道您是否可以做一些花哨的 operator() 重载,或者传递一个函数,或者在 calc 中创建一个 friend 类。理想情况下,我应该只能访问行 31 - 53 ,它们都是 public

谢谢!

编辑:得到一个yall的例子:https://ideone.com/jypJQS这是它应该输出的内容以及它现在的工作方式

最佳答案

也许这会改变您当前的代码。但是我认为calc中的函数应该是object的成员。所以你可以这样:

ship.eccentricity(target);

让我感到困惑的(这可能是这里的大问题)是您似乎在您的 calc 对象(私有(private)成员)中定义了一些硬关系。那些是干嘛的?从代码中,我猜每个“船”都有一个 calc 对象。如果是,那么将代码添加到对象而不是在对象和计算之间保持 1-1 关系将是另一个原因。

关于c++ - 减少重复的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14024640/

相关文章:

c++ - 传递对指针的引用

c++ - 在 Win32 上使用 icu u32_regex 内存泄漏/缓存提升

c++ - OpenCV:如何读取 float 图像

javascript - 尝试使用面向对象的 javascript 进行建模

python - QDateEdit对象没有属性 "setText"

c++ - 输入为高值时程序崩溃

php - 正确使用依赖注入(inject)容器

java - Java嵌套静态类

C++ 访问静态 constexpr 数组

c# - 预期的类、委托(delegate)、枚举、接口(interface)或结构