класса, строка 20. Как правильно это сделать?
https://godbolt.org/z/x5Efj4E19
Инициализация должна быть в 16-й строке. В 20-й что-то странное написано.
Я голову сломал - чего-то я не понимаю про предмет. Покажи как правильно это сделать, пожалуйста.
что вы вообще хотели сказать в строке 20? typename typename {}; - это не синтаксис С++
Написана чушь. Что должна делать 20-я строчка? Я попробую сванговать: 1. 20-я строчка "добавляет" в base_t<1> инстанциацию type_holder_t<int> 2. Предполагается, что 30-я строчка в дальнейшем вытащит эту инстанциацию из base_type.
1) Есть шаблонный класс (структура) base_t 2) В нем есть шаблонное статическое поле type_holder Что хотим - для каждой специализации шаблонного класса base_t иметь какую-то свою специализацию шаблонного поля type_holder 3) Инициализируем шаблонное поле type_holder после объявления класса base_t - должны мы это сделать? Вроде бы да. 4) Объявляем переменную b1, которая делает инстанс класса base_t. 5) У инстанса b1 есть type_holder, который хочется параметризировать типом int вот для специализации base_t<1>. Именно так должно работать статическое шаблонное поле. Исходя из хотелок, таки да, цели 20 и 30 строк свангованы корректно 🙂
Шаблонное статическое поле, которое не зависит от шаблона класса - это что-то странное и навряд-ли работающее.
template<typename A, typename B> constexpr int b1;
https://godbolt.org/z/ov1qYaa75
Factory не получится для такого сделать, так ведь?
От чего зависит factory? Если она должна возвращать разные base_t<..> в зависимости от рантайм аргумента, то без std::variant и type erasure не обойтись.
Я не знаю T в точке вызова. Поэтому хотелось бы его создать и сохранить сразу при создании объекта base_t.
С++ статически типизирован. Предлагаю описать задачу целиком
Реализация паттерна Наблюдатель со следующими параметрами: - неизвестные типы Наблюдателей, которые подписываются на один тип событий - шаблонные методы уведомления и обновления состояний Вот пожалуй и все, что надо. В Паблишере надо хранить указатели на черти-что. Когда наступает событие, то Паблишер дергает один метод - уведомить, который имеет шаблонные аргументы. Единственной точкой на этом пути, где происходит взаимодействие Паблишера с Наблюдателем, является метод подписки Наблюдателя на тип событий и когда можно у него спросить - какого ты типа?
map<typeid, list>
А в чем проблема хранить сразу тайп еражур коллбеки? std:: function<void(Event>)
Можно прикрутить какие-нибудь токены для отписки, кому нужно отписываться - будет из сохранять при подписке, при отписке брать токен и идти туда, куда надо
Шаблонная нагрузка уведомления и обновления состояния. Грубо говоря есть template <typename SomePayload> observer.Update(SomePayload &&)
Большое спасибо! Я забыл про typeid. Это может быть прямо выходом.
Так лямбду делаешь и все, не? Типа через концерт/сфинае чекеешь, что есть нужный метод, а потом оборачиваешь в лямбду с захватом tgis
Обсуждают сегодня