C ++ конструкторы и вычисляемые поля - PullRequest
4 голосов
/ 24 апреля 2011

В C ++ конструкторы должны инициализировать const переменные, используя списки инициализации.

Что если моему конструктору нужно вычислить значения этих полей? Скажи через поиск в базе данных или простые вычисления.

Здесь можно применить фабричный шаблон, но он кажется немного тяжелым. Я рассматриваю статические методы, такие как X::GetX(param1, param2), которые будут вычислять значения и вызывать приватный конструктор.

Есть ли лучший или более популярный шаблон, который можно использовать здесь?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2011

Нет необходимости вызывать приватный конструктор, вы можете вызывать статические методы (или, в некоторых случаях, даже нестатические) прямо из списка инициализатора.Например:

class testclass {
    public:
    testclass::testclass(int n): memberdata(fn(n)) { }

    private:
    int fn(int n) {
        // Various calculations on 'n'
        return 12;
    }

    int memberdata;
};
0 голосов
/ 24 апреля 2011

Вы можете вызвать метод внутри самого списка инициализатора:

class A {
public:
  A () : t_Const(X::Get(param1, param2)) { }  // constructor can be public
  const int t_Const;  // this is your variable
};

Зачем вам нужен частный конструктор!

0 голосов
/ 24 апреля 2011

Вы можете вызывать статические функции внутри инициализаторов, и эти функции могут содержать любую логику, какую пожелаете.

...