Как передать аргумент шаблона другому шаблону внутри первого - PullRequest
0 голосов
/ 01 марта 2012

Я не уверен, как это сформулировать, но в основном я пытаюсь создать класс шаблона, который принимает в качестве параметра шаблона один или два типа, которые затем используются для определения указателей на другой класс, который также является шаблоном.Я попытаюсь продемонстрировать, что я хочу сделать, в коде ниже.

template <typename A> class Alpha{
   public:
   A first;
};
template <typename B> class Beta{
   public:
   B second;
};
template <typename C,typename D> class Group{
   public:
   //I am pretty sure this is not how you do a constructor for a template.
   Group(Alpha<C>* a,Beta<D>* b){
      one = a;
      two = b;
   }

   Alpha<C> * one;
   Beta<D> * two;

};

Alpha<int> a;
Beta<char> b;
Group<int,char> g(&a,&b);

Это, однако, не работает.Я уверен, что это происходит из-за моего непонимания тонкостей шаблонов с ++.Любой ввод будет очень полезнымотсутствует ключевой фрагмент кода в реальной реализации класса Alpha.

EDIT2: я нашел истинный корень своей проблемы

Казалось бы, я упустил фактчто разделение классов Template на обычные комбинации файлов .h / .cpp ведет себя не так, как с обычными классами.

1 Ответ

0 голосов
/ 01 марта 2012

Да, но вы можете столкнуться с некоторыми проблемами:

Group<int,char>* g = NULL;
{
   Alpha<int> a;
   Beta<char> b;
   g = new Group<int,char>(&a,&b);
}
//g is no longer correct here

Это происходит потому, что a и b находятся в области действия до закрытия }.Но g все еще содержит указатели на них.Вот почему я предлагаю вам использовать указатели только тогда, когда вы действительно знаете, как они работают.В этом случае умные указатели также будут хорошим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...