生成Object时宏和模板的组合

时间:2014-09-16 05:36:05

标签: c++ qt templates c++11 macros

我创建了一个模板类来填充类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
}

1 个答案:

答案 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
}