C++ 生成对象时宏与模板的组合
我创建了一个模板类,用于填充T类的一些对象,但是T类的对象在网络中共享,我不想提供有关它们的信息,因此我为每个T类创建了一个帮助器类和一个宏:C++ 生成对象时宏与模板的组合,c++,qt,templates,c++11,macros,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
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
}
模板
QList ContextClass::query(const QString&q){
T inst;
胸径(T)辅助;
//还有另一种方法
}
我得到一个未声明的标识符错误!!
如果我不使用函数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
}
模板
类助手{
Helper*createInstance();
//一些方法
}
类EntityHelper:公共帮助程序
{
EntityHelper*createInstance();
//需要查询实体表数据库
}
记住宏只是文本替换,因此您的代码变成:
template<class T>
QList<T> ContextClass::query(const QString& q){
T inst;
THelper helper;
// and another methods
}
模板
QList ContextClass::query(const QString&q){
T inst;
帮手;
//还有另一种方法
}
这是胡说八道
在您的情况下,只需使用模板:
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
}
模板
班级助理;
模板
类助手
{
//从数据库填充所需的方法
};
模板
QList ContextClass::query(const QString&q){
T inst;
帮手;
//还有另一种方法
}
我不想提供关于它们的信息
你到底想实现什么?我的实体只是一个DTO对象,我与其他应用程序共享这个对象,所以我不想在这个对象中保留诸如列名和表之类的数据库信息,一个EntityHelper知道所有关于数据库的东西我每个Helper都有不同的类成员,每个Helper都是静态定义我也不能使用这个,为什么我不使用这个函数我没有任何错误?我确实遇到了一个错误,也许你可以给我们展示更多的代码?请注意,您可以为每个T
专门化Helper
,这样它们就可以有不同的类成员。如果我添加一个THelper类只是为了不出错,对于另一个T,它总是使用THelper或用类名替换T,我的意思是编译器首先替换宏,然后创建模板函数?好的,看来我必须使用您的建议,但是我如何使用不同的派生类Helper您想从Helper
派生什么?你知道你可以专门化Helper
模板吗?我更新了代码来澄清这个想法。