2016-03-04 2 views
0

Я пытался разрешить моей собственной векторной библиотеке быть мета-типом в QT, через учебные пособия, которые они учат мне Q_DECLARE_METATYPE(class). Однако мой класс является шаблоном. Я искал и нашел недокументированный макрос Q_DECLARE_METATYPE_TEMPLATE_1ARG(), однако я нашел на нем один отчет об ошибке, и никаких отзывов о том, было ли оно исправлено или нет. Я попытался использовать его, и он все еще не регистрируется. Причина в моем классе Shader моего игрового движка, я храню мундиры и в зависимости от униформы, он сохраняет значение как QVariant. Вот где я столкнулся с проблемой. Кто-нибудь знает, как зарегистрировать шаблоны для QMetatypes?Объявление класса шаблона метатипа в QT

ответ

2

Qt использует макрос, который вы указываете внутренне, и есть также версия с двумя аргументами. QtCore/qmetatype.h показаны примеры использования. Я не уверен, почему он не работает так, как ожидалось для вас. Мне нужно, чтобы ваш код понял больше.

Однако существует обходное решение, которое может быть приемлемым для вас: если вы знаете все возможные аргументы шаблона, которые вам понадобятся, вы можете явно объявить, что каждый экземпляр шаблона является метатипом. Например, если ваш класс шаблон называется Foo<T>, и вы знаете, что вы собираетесь использовать только Foo<int> и Foo<float>, вы можете просто зарегистрировать те:

Q_DECLARE_METATYPE(Foo<int>) 
Q_DECLARE_METATYPE(Foo<float>) 
Смежные вопросы