Войти
ФлеймФорумОбщее

Вопросы (703 стр)

Страницы: 1702 703 704 7051036 Следующая »
#10530
14:15, 17 июля 2019

Vlad2001_MFS
> Я спрашиваю про конструктор сгенерированной структуры.
Крестопроблема детектед.


#10531
14:19, 17 июля 2019

Vlad2001_MFS
> Есть ли гарантия, что REG всегда будет отрабатывать до main?

Если REG увести в другой юнит компиляции, то порядок инициализации кишок REG и data как минимум будет неопределён, поэтому будет плохо.
Есть гарантия по стандарту, что глобальные переменные примитивного типа с инициализаторами будут точно сконструированы до любого из пользовательских классов независимо от юнита компиляции и прочих факторов. Поэтому можно сделать указатель на данные изначально nullptr который инициализируется при первом обращении и так далее.
Еще один неплохой вариант - завернуть data в синглтон Майерса, но там тоже по ситуации надо смотреть, тем не менее у него есть подобные гарантии.

#10532
(Правка: 14:27) 14:26, 17 июля 2019

=A=L=X=
Вроде этого?

#define CONCAT2(a, b) a##b
#define CONCAT(a, b) CONCAT2(a, b)
#define REG(x) \
  static struct CONCAT(init, __LINE__) { CONCAT(init, __LINE__)() { \
    Data::instance().data.push_back(x); \
  } } CONCAT(init_instance, __COUNTER__)

struct Data {
  static Data &instance() {
    static Data inst;
    return inst;
  }
  
  std::vector<int> data;
};

REG(1);
REG(2);

int main() {
  for (auto &it : Data::instance().data) {
    printf("%d\n", it);
  }
}

На мой взгляд, все неплохо. Спасибо за идею с синглтоном.

#10533
14:28, 17 июля 2019

Vlad2001_MFS
не припомню случая, когда порядок инициализации глобальных переменных не прострелил бы кому-нибудь ногу на одном из этапов разработки.

#10534
14:33, 17 июля 2019

Suslik
Плохо, однако. То есть гарантии вызова конструктора до main нет? Мне не важен порядок вызова конструкторов, нужно лишь выполнить их до main. В GCC для этой темы есть __attribute__((constructor)), а в VC++ я подобного не знаю.

#10535
14:42, 17 июля 2019

Vlad2001_MFS
> То есть гарантии вызова конструктора до main нет?

Некоторые есть, но иногда можно самого себя загнать в невыполнимый капкан. Например синглтон Майерса при всех гарантиях можно сломать из конструктора A пытаясь дотянуться до B который в своём конструкторе опять же лезет зачем то в тот же A который еще не доконструирован и так далее.

#10536
(Правка: 14:52) 14:51, 17 июля 2019

=A=L=X=
Я вообще с помощью этого хочу сделать создание некоторой группы классов по их хешу.
Наверное, будет что-то вроде:

struct Factory {
    static Factory &instance() {
        static Factory factory;
        return factory;
    }
    
    std::map<uint64_t, std::function<IParent*()>> funcs;
};

#define REG_TYPE(T)
    static struct UNIQUE_NAME {
        UNIQUE_NAME() {
            Factory::instance().funcs[typeid(T).hash_code()] = []() { return new T(); }
        }
    };
Только не в таком ужасном исполнении, конечно.

Стоит ли в таком случае ожидать проблем? Если есть менее черезжопныеужасные варианты реализации - рад буду узнать.

#10537
15:14, 17 июля 2019

=A=L=X=
> при всех гарантиях можно сломать из конструктора A пытаясь дотянуться до B
> который в своём конструкторе опять же лезет зачем то в тот же A который еще не
> доконструирован и так далее.

Изображение
#10538
17:45, 17 июля 2019

Vlad2001_MFS

Самые примитивные виды фабрик примерно так все и делают.
Ну т.е. это базис на который там потом нанизывается.
Я лично не люблю в Майерса обёртывать еще для большего контроля убивания и поэтому действую через указатели на фабрики которые изначально гарантированно занулены еще на этапе линковки программы.

#10539
(Правка: 16:01) 15:24, 21 июля 2019

Что за беспредел? Недавно только зарегистрировался в ВК(необходимость), два месяца назад где-то. Сейчас написала в личку "забираю" какая-то голая баба...
Люди, что в творится в этом мире?

Bondersan, забери меня с Земли, пожалуйста!

+ Update:
#10540
18:10, 21 июля 2019

Vlad2001_MFS
> Люди, что в творится в этом мире?
Банальный спам левыми ссылками.

#10541
18:14, 21 июля 2019

Vlad2001_MFS
> И часто такое в этих ваших ВК?
ВК, наверное, самая ненавязчивая из соцсетей.
Зайди в настройки профиля и настрой уведомления.

#10542
18:15, 21 июля 2019

Mikle
> ВК, наверное, самая ненавязчивая из соцсетей.
А что же в остальных творится тогда?

#10543
18:30, 21 июля 2019

Mikle
> ВК, наверное, самая ненавязчивая из соцсетей.
Видимо потому что там банят того кто спамит, а не того кто обратил внимание на спам.

#10544
19:18, 21 июля 2019

Vlad2001_MFS
> Bondersan, забери меня с Земли, пожалуйста!
Vlad2001_MFS
> написала в личку "забираю"
Чего ж тебе ещё нужно?

Страницы: 1702 703 704 7051036 Следующая »
ФлеймФорумОбщее