Сочетание макросов и шаблонов при создании объекта

0

Я создаю класс шаблона для заполнения некоторых объектов класса 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
 }

Я получаю ошибку Unellared идентификатора 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
}
  • 0
    i dont want give so information on them Что именно вы пытаетесь достичь?
  • 0
    мои сущности - это просто объект DTO, и я делюсь этими объектами с другими приложениями, поэтому я не хочу хранить в этих объектах информацию базы данных, например имена столбцов и таблицы, EntityHelper знает все о базах данных
Теги:
c++11
templates
qt
macros

1 ответ

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
}
  • 0
    у меня есть разные члены класса для каждого помощника, каждый помощник является статическим определением, я тоже не могу использовать это, почему, когда я не использую эту функцию, у меня нет никакой ошибки?
  • 0
    Я получаю ошибку, может быть, вы можете показать нам больше кода? Обратите внимание, что вы можете специализировать Helper для каждого T чтобы они могли иметь разных членов класса.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню