Название: Не наследуется шаблон
Отправлено: phpCoder от Апрель 08, 2015, 10:34
Добрый день. Есть код: C++ (Qt) template<typename K, typename V> class AbstractBaseDialog : public QDialog { public: typedef QHash<K, V> Result; explicit AbstractBaseDialog(QWidget *parent = 0); virtual ~AbstractBaseDialog() {} ... }; class AbstractFormattingDialog : public AbstractBaseDialog<QString,QStringList> { Q_OBJECT public: typedef Result::ConstIterator Iterator; explicit AbstractFormattingDialog(QStringList &source, QWidget *parent = 0); virtual ~AbstractFormattingDialog() {} ... protected: ... virtual void _loadData() = 0; ... };
Пишет это: error: 'AbstractBaseDialog' is not a template type template<class K, class V> class AbstractBaseDialog : public QDialog ^ error: expected template-name before '<' token class AbstractFormattingDialog : public AbstractBaseDialog<QString,QStringList> ^ error: expected '{' before '<' token error: expected unqualified-id before '<' token Что ему не так?
Название: Re: Не наследуется шаблон
Отправлено: sociopath от Апрель 08, 2015, 10:47
Классы, наследуемые от QObject и имеющие макрос Q_OBJECT, не могут быть шаблонными. Одно из базовых ограничений Qt как, например, то, что нельзя наследоваться от двух QObject-derived классов.
Название: Re: Не наследуется шаблон
Отправлено: phpCoder от Апрель 08, 2015, 10:48
Кажется понял. Когда делаешь C++ (Qt) friend class AbstractBaseDialog;
то надо делать: C++ (Qt) template<typename K, typename V> friend class AbstractBaseDialog;
т.е. пихать во все дыры конструкцию template<...> PS Значит к Qt не относится.
|