c++ - 宏与模板结合生成Object

标签 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->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
}

最佳答案

记住宏只是文本替换,所以你的代码变成:

 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
}

关于c++ - 宏与模板结合生成Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25861321/

相关文章:

c++ - 如何在没有无限循环的情况下使用 CMake 的 add_subdirectory

c++ - 如何在 Qt5 中使用键盘输入来执行函数 xyz?

c++ - 模板参数简化

excel - 在 Excel 中使用 VBA 从 PowerPoint 模板创建新的 PowerPoint 演示文稿

C++如何使用相同的函数两次使用不同的名称和变量的不同名称

C++:在簿记类中记录余额

c++ - 为什么当 std::initializer_list 被用作赋值参数时它不是引用类型?

c++ - 获取返回的 multimap 迭代器的内容

c++ - QTextEdit 更改单个段落/ block 的字体

c++ - 用Qt5 painter正确画圆弧