boost::posix_time::time_duration
имеет три перегрузки конструктора и не имеет неявного конструктора. Мне нужно сделать некоторые вычисления в классе, который имеет несколько членов time_duration
, прежде чем я смогу их инициализировать. Все это подразумевает, что без конструктора по умолчанию я не могу позволить себе роскошь подготовки входных данных для членов моего класса в конструкторе составного класса.
Схема может быть описана следующим образом (что ошибочно):
class X {
public:
x(int i,int j){}
};
class Y {
x _x;
public:
y() {i = 1+1; j=1-1; _x(i,j);}
};
int main()
{
return 0;
}
Я хотел бы, чтобы некоторые соответствующие способы построения Y (с мотивацией), где
- X не имеет конструктора по умолчанию.
- X не может быть изменен напрямую (но может быть подклассом).
- Сгенерированный код является детерминированным (нет ненужных дорогостоящих конструкций malloc/vtables и т.д.).
- Ключевая точка Класс Y имеет n X членов и m возможных вычислений. Где n >1 и m > 1. Так что элегантность важна.
- Соображения модульного тестирования важны.
На данный момент я склоняюсь либо к подклассам, либо к вызову функций для выполнения вычислений и вызову этих функций в списке инициализации (если это вообще возможно). Вы можете прокомментировать эти подходы :D.
time_duration
? Версия, которую я установил, является как конструируемой по умолчанию, так и назначаемой, но она довольно старая. Если его можно присваивать и вы не хотите вычислять правильное значение в списке инициализаторов, просто инициализируйте его каким-нибудь фиктивным значением, напримерseconds(0)
, и присвойте правильное значение в конструкторе. Если вы вычисляете несколько длительностей из нескольких входных данных, то выполнение всего этого в функциях, вызываемых из списка инициализаторов, может привести к дублированию работы, поэтому разумно этого избегать. - person Steve Jessop   schedule 14.12.2010