Вопрос таков: есть такой класс (файл Network.h)
class Network
{
static Nodes nodes;
static Relations relations;
};
Мне требуется инициализировать сразу и nodes, и relations. В файле Network.cpp я прописываю следующее:
Nodes Network::nodes = {
Node(0),Node(1),
Node(2),Node(3),
Node(4),Node(5)
};
Relations Network::relations =
{
Relation(0,3, rand() % 10 - 5),
Relation(1,3, rand() % 10 - 5),
Relation(2,3, rand() % 10 - 5),
Relation(0,4, rand() % 10 - 5),
Relation(1,4, rand() % 10 - 5),
Relation(2,4, rand() % 10 - 5),
Relation(3,5, rand() % 10 - 5),
Relation(4,5, rand() % 10 - 5)
};
Проблема в том, что требуется прописать
srand(time(nullptr))
Подскажите, где я должен это прописать?
Так не годится?
Relations Network::relations =
{
(srand(time(0)),Relation(0,3, rand() % 10 - 5)),
Relation(1,3, rand() % 10 - 5),
Relation(2,3, rand() % 10 - 5),
Relation(0,4, rand() % 10 - 5),
Relation(1,4, rand() % 10 - 5),
Relation(2,4, rand() % 10 - 5),
Relation(3,5, rand() % 10 - 5),
Relation(4,5, rand() % 10 - 5)
};
Но я не уверен, что это идеальное и переносимое решение. Хотелось бы от гуру стандартов услышать, точно ли инициализаторы вычисляются в порядке слева направо?
Еще вариант - в конструкторе Relation
статический объект вспомогательного класса, в конструкторе которого вызывается srand()
.
На вашем месте я бы использовал ленивую инициализацию:
class Network{
static Relations& relations(){
static Relations relations = {
Relation(0,3, rand() % 10 - 5),
//...
Relation(4,5, rand() % 10 - 5)
};
return relations;
}
};
int main(){
srand(time(nullptr))
}
Локальная переменная relations
проинициализируется при первом обращении к ней. Таким образом можно быть уверенным что функция srand
будет вызвана раньше.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Visual Studio 2017 не видит заголовочные файлы Windowsh, WinSock2
Пишу сапёра на с++Для хранения клеток использую двумерный динамический массив(позже планирую пользовательский ввод размера поля)
Я хочу сделать так, что бы некоторый набор элементов в массиве при запуске имел значение trueВ дальнейшем, когда пользователь занимает какую...