如何最好地选择要操作的内部参数
How can I best _select_ which of the internal parameters to operate on?
这是一个简单的问题。我有一个班CubeMap。CubeMap类中有一个vector<ColorValue>
,它包含立方体映射的6个面中的每个面的颜色值。
class CubeMap
{
vector<ColorValue> colorValues, rotatedColorValues ;
void save( char* filename ) ;
} ;
程序运行时可以旋转立方体贴图。如果旋转,则rotatedColorValues包含旋转的版本,而colorValues始终包含原始版本。
立方体映射有一个成员函数save( char* filename );
。原始立方体映射总是存储在colorValues中,立方体映射的"旋转"版本可能存储在rotatedColorValues中也可能不存储。
现在保存例程将保存colorValues或rotatedColorValues。我有几个选择。
如何最好地选择要操作的内部参数?
将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
值,例如RotatedLeft
和RotatedRight
,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
指针,所以一切都变得更干净了。
相关文章:
- SFINAE 内部概念模板参数
- 作为模板模板参数的内部模板类
- 自动参数如何在内部工作
- 如何使结构内部的可变参数模板可以在外部访问?
- 如何处理可能指向内部数据的参考参数
- 如何从对象内部的 typedef 获取模板参数类型
- 是定义的函数参数的内部执行顺序
- 用相同的参数将内部和外部构造函数分开
- 宏 htonl 将内部逗号解释为参数分隔符
- 参数内部和外部的指针
- 将模板参数传递到内部结构时出错
- 函数和内部函数相同的参数
- 从内部类型参数推断外部类型
- 定义变量以保存内部参数
- 什么..表示函数内部参数(const char*值,..)
- 如何获得具有已知内部参数的外部相机参数
- 如何最好地选择要操作的内部参数
- 基于嵌套的内部参数专门化模板
- 链接的模板模板参数-将内部参数约束为相同
- RealSense投影::CreateColorImageMappedToDepth返回Null,如果其中一个内部参数通