如何最好地选择要操作的内部参数

How can I best _select_ which of the internal parameters to operate on?

本文关键字:内部 参数 操作 何最好 选择      更新时间:2023-10-16

这是一个简单的问题。我有一个班CubeMap。CubeMap类中有一个vector<ColorValue>,它包含立方体映射的6个面中的每个面的颜色值。

class CubeMap
{
    vector<ColorValue> colorValues, rotatedColorValues ;
    void save( char* filename ) ;
} ;

程序运行时可以旋转立方体贴图。如果旋转,则rotatedColorValues包含旋转的版本,而colorValues始终包含原始版本。

立方体映射有一个成员函数save( char* filename );。原始立方体映射总是存储在colorValues中,立方体映射的"旋转"版本可能存储在rotatedColorValues中也可能不存储。

现在保存例程将保存colorValuesrotatedColorValues。我有几个选择。

如何最好地选择要操作的内部参数

CubeMap::save的签名更改为:

// 1. use the name:
void saveRotatedVersion( char* filename ) ;
void saveOriginal( char* filename ) ;
// 2. OR use a parameter:
void save( char* filename, bool rotatedVersion ) ;
// 3. OR turn it into a static function and require the object
// being saved to be included
static void save( char* filename, const vector<ColorValue> &toSave ) ;
// 4. OR use an enum
enum CubeMapObject { Original, Rotated } ;
static void save( char* filename, CubeMapObject objectToSave ) ;

编辑:

a 5。我还可以设置一个内部状态参数,作为的选择器

class CubeMap
{
    vector<ColorValue> colorValues, rotatedColorValues, *currentSource ;
    // save uses currentSource, whatever that points to
    void save( char* filename ) ;
} ;

以下哪一项是最佳选择,为什么?

我会选择数字1或数字4。数字2在可读性上输给了数字4,并且不像数字4那样不言自明,而数字3揭示了太多的实现。

作为隐藏保存过程的实现细节的private方法,第三个是一件好事。

如果您希望添加其他CubeMapObject值,例如RotatedLeftRotatedRight,p.S.编号4将更合适。

我最终使用了我的最终编辑:

class CubeMap
{
    vector<ColorValue> colorValues, rotatedColorValues, *currentSource ;
    // save uses currentSource, whatever that points to
    void save( char* filename ) ;
    void setSource( vector<ColorValue> *newSource ) ;
    void revertToPreviousSource() ; // "pop"
} ;

这样做的优点是,接口函数的名称很简单。此外,所有cCubeMap函数现在都使用currentSource指针,所以一切都变得更干净了。