template <typename T, typename Func> void hook(QObject *receiver, Func &&f);, и определение этой функции выглядит так: template <typename T, typename Func>
void IObjectPool::hook(QObject *receiver, Func &&f)
{
for (auto *obj : findAll<T>())
f(obj);
connect(this, &IObjectPool::objectAdded, receiver, [=](auto object) {
if (auto obj = qobject_cast<T*>(object))
f(obj);
});
}
до qt5.15 на версии qt.5.12.8 этот код работал стабильно и выполнение связки сигнала происходило корректно, сейчас тоже всё корректно конектиться, но только под линукс (убунту)!!! Под виндой пишет вот эту дичь QObject::connect: signal not found in ObjectPool, я не могу понять с какого перепуга коннект не проходит в шаблонной функции и куда копать?
Ну яб сказал надо копать в раздел взаиимосвязи IObjectPool и ObjectPool.. мне кажется не в темплейте дело
Но ведь под ubuntu всё стабильно, и взаимосвязть всего одна в одной функции ObjectPool'a, есть функция add которая эмитит сигнал
Я скорее про декларацию сигнала в интерфейсе
а зачем определение шаблона вынесено в cpp файл (я правильно понял?)?
Не, оно не вынесено) вы что, оно в хидере лежит
Обсуждают сегодня