我创建了一个模板类来填充类T的一些对象,但是T的对象在网络中共享,我不想给它们提供所有信息,所以我为每个类T和宏创建一个帮助类:
class Entity {
// just Properties
}
class EntityHelper{
// needed method for fill from database
}
#define DBH(x) x##Helper
这是填充对象列表
的上下文类的函数 template<class T>
QList<T> ContextClass::query(const QString& q){
T inst;
DBH(T) helper;
// and another methods
}
我得到THelper未声明的标识符错误!! 如果我不使用函数m-&gt; query(q);我没有得到错误? 我知道我可以用另一种方式来做这件事,但在这种方法中出了什么问题呢?
更新
好吧,似乎我必须使用另一种方法,我用过它?template <class T>
class Helper {
Helper<T>* createInstance();
//some methods
}
class EntityHelper : public Helper<Entity>
{
EntityHelper* createInstance();
// query needed for entity table database
}
答案 0 :(得分:1)
记住宏只是文本替换,因此您的代码变为:
template<class T>
QList<T> ContextClass::query(const QString& q){
T inst;
THelper helper;
// and another methods
}
这是胡说八道......
在您的情况下,只需使用模板:
template<class T>
class Helper;
template<>
class Helper<Entity>
{
// needed method for fill from database
};
template<class T>
QList<T> ContextClass::query(const QString& q){
T inst;
Helper<T> helper;
// and another methods
}