2016-01-07 2 views
0

Класс T должен предоставить функцию-член, которая копирует некоторые, но не все переменные-члены (минимальный пример: только одна переменная X) от одного объекта типа T к другому объект типа T. Есть два возможных решения, копирование из и копирования в:Конструкция API: направление и имя функции копирования объекта в объект

class T { 
    some_type X; 
    [...] 
    void copy_X_from_other(const T& other) { X = other.X; } 
    void copy_X_to_other (T& other) const { other.X = X; } 
}; 

Существуют ли причины предпочесть один вариант по сравнению с другими? Существуют ли путеводители, примеры лучшей практики или вообще что-либо?

Как следует назвать эту функцию? Идеальное имя было бы намного короче, чем copy_(from|to)_other, но не оставляйте сомнений относительно направления копирования.

ответ

0

Это довольно странная вещь, чтобы попытаться скопировать только одно свойство, но я не стану сомневаться в этом.

Почему бы не просто сделать:

void copy_<property_name>(const T& other) { <property_name> = other.get_<property_name>; } 

Это будет соответствовать стандарту копирующего присваивания, который определяется как

T& operator=(const T& other) 
{ 
    //copy 
    //return 
} 

и, как вы можете видеть, принимающая сторона в левой это также.

Кроме этого, я не думаю, что есть какие-либо стандарты для копирования одного свойства другого объекта.

+0

Извините, я вводил вас в заблуждение, написав «одно свойство», что является крайне упрощенным моей реальной проблемой. Я отредактирую вопрос, чтобы сделать это более ясным. –

+0

Решение по-прежнему применяется, просто добавьте больше переменных-членов, не так ли? Если вы не хотите выбирать, какие переменные-члены вы хотите скопировать, это то, что вы на самом деле хотите сделать? – user1234141515134321321513