Это простой вопрос. У меня есть класс CubeMap. Внутри класса CubeMap находится vector<ColorValue>
, который содержит значения цвета для каждой из 6 граней кубической карты.
class CubeMap
{
vector<ColorValue> colorValues, rotatedColorValues ;
void save( char* filename ) ;
} ;
Кубическая карта может вращаться во время работы программы. Если он повернут, то rotatedColorValues содержит повернутую версию, а colorValues всегда содержит исходную версию.
CubeMap имеет функцию-член 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 ) ;
} ;
Какой из них является лучшим и почему?