2011-03-03 63 views
1

我无法编译带有通用成员函数和变量的qt插件。这个想法是:我有一个插件A1使用其他插件的未指定类型T(其他接口)。 A1实现了接口(抽象类)A.在A中我需要一个传递其他插件的函数。C++替代Qt插件接口中的模板类

它看起来像这样:

template <typename T> 
class A { 
public: 
    void setPlugins(QList<T*>* plugins) 
    { 
    plugins_ = plugins; 
    } 
private: 
    QList<T*>* plugins_; 
}; 

我希望我已经明白模板正确的,但我认为这应该正常工作。现在的问题是,似乎无法将插件接口(A)定义为具有Qt插件概念的模板类。有另一种方法可以做我想做的事吗?


编辑: 我宁愿没有RTTI的解决方案。

回答

1

我会尽力回答...

在Qt每个插件类应自QObject继承。
因此,你可能会下降模板和使用指针的列表的QObject存储插件:在这种情况下,你将失去类型信息,并需要以某种方式演绎的插件类型

QList<QObject*> plugins_; 

然而,从QObject指针稍后插入时,您需要使用列表中的特定插件作为插件。
QObject是一种多态类型,因此您可以在需要时使用dynamic_cast来确定确切插件的类型。希望这可以帮助。

+0

......如果你不使用'-fno-rtti'。 – 2011-03-03 15:20:48

+0

这个想法很好,应该可以工作,但是:要设置的插件的接口不是QObject,只能是它们的实现。这意味着我必须将调用者的列表声明为QObject的列表*什么不是很好处理,特别是在删除此列表以放入加载的插件(正如我现在所做的那样)时。但也许这是做到这一点的唯一可能性。 – FunkyClaude 2011-03-04 09:06:40

+0

@Mike DeSimone:你说得对。也许有人知道没有RTTI的解决方案? – FunkyClaude 2011-03-04 12:50:59

0

一个问题是,A不是一个类,而是一个类的模板。您可能需要为您的界面使用具体的A <x>。