帮助在c ++中组合两个函数

Zee*_*ang -3 c++

我只是尝试别人的代码.

我有两个功能:

int Triangle(Render *render, int numParts, Token *nameList, Pointer *valueList) 
    int i;
    for (i=0; i<numParts; i++)
    {
        switch (nameList[i])
        {
        case GZ_NULL_TOKEN:
            break;

        case GZ_POSITION:
            return putTrianglePosition(render, (Coord *)valueList[i]);
            break;
        }
    }

    return SUCCESS;
}

int putTrianglePosition(Render *render, Coord vertexList[3]) /*vertexList[3][3:xyz]*/
{
    Coord *pv[3];
    int i,j;

    // sort verts by inc. y and inc. x
    pv[0] = &vertexList[0];
    pv[1] = &vertexList[1];
    pv[2] = &vertexList[2];
    for (i=0; i<2; i++)
        for (j=i+1; j<3; j++)
        {
            if ((*pv[i])[1]>(*pv[j])[1] || 
                (*pv[i])[1]==(*pv[j])[1] && (*pv[i])[0]>(*pv[j])[0]) {
                Coord *tmp;
                tmp = pv[i];
                pv[i] = pv[j];
                pv[j] = tmp;
            }
        }
    ;

    // all y the same?
    if ((*pv[0])[1] == (*pv[2])[1]) {
        drawHorizonLine(render, *pv[0], *pv[2]);
        return SUCCESS;  
    }

    // assign middle point
    Coord mid; 
    mid[1] = (*pv[1])[1];   // y
    float ratio = ((*pv[1])[1] - (*pv[0])[1]) / ((*pv[2])[1] - (*pv[0])[1]);
    mid[0] = (*pv[0])[0] + ratio * ((*pv[2])[0] - (*pv[0])[0]); // x
    mid[2] = (*pv[0])[2] + ratio * ((*pv[2])[2] - (*pv[0])[2]); // z

    if (mid[0]<=(*pv[1])[0]) {  // compare X
        drawTrapzoid(render, *pv[0], mid, *pv[0], *pv[1]); // upper tri
        drawTrapzoid(render, mid, *pv[2], *pv[1], *pv[2]); // lower tri
    }else{
        drawTrapzoid(render, *pv[0], *pv[1], *pv[0], mid); // upper tri
        drawTrapzoid(render, *pv[1], *pv[2], mid, *pv[2]); // lower tri
    }

    return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我不想要两个功能.我想将putTrianglePosition()函数复制到Triangle()函数中.

我尝试过这样做,但是我遇到了很多错误.

有人可以告诉我该怎么做吗?

Car*_*ers 9

你不应该把功能放在一起,你应该将它们分开.在任何可以命名的地方放置一个新功能 - 尽量让它们尽可能小.如果你想要一个能完成所有这些工作的函数,那就有一个调用其他函数的函数.

int foobar() {

    int a;
    int b;

    /* do a whole bunch of stuff with a */

    /* do a whole bunch of stuff with b */

    return  a + b;

}
Run Code Online (Sandbox Code Playgroud)

这就是你想要做的事情.相反,这样做:

int foo(){

    int a;

    /* do a bunch of stuff with a */

    return a;

}

int bar() {

    int b;

    /* do a bunch of stuff with b */

    return b;

}

int foobar() {

    return foo() + bar();

}
Run Code Online (Sandbox Code Playgroud)

结果将更清洁,更易于维护和重复使用.

  • +1作为干净的代码是软件开发中最重要的事情之一(而且经常被忽略的事情之一) (3认同)