Учитывая класс шаблона:Как вы можете использовать типы, определенные в шаблоне в C++?
template<class T, class U>
struct myList {
typedef T head;
typedef U next;
};
class nullList {};
Можно составить список классов, например
myList<int, myList<string, myList<short, nullList> > >;
Я пытаюсь использовать приведенный выше список, чтобы создать класс шаблона, который обрабатывает только классы в списке. В приведенном выше примере мой класс будет обрабатывать ints, string и shorts (например, печатать их на консоли).
Я боролся с этим некоторое время, и я до сих пор не уверен, с чего начать. Любой код, который начинается с
template<class T, class U>
class myClass {
...
};
терпит неудачу, потому что MyClass принимает только один параметр шаблона, и что MyList т.е.
myClass<myList>
Но если я пытаюсь использовать
template<typename l>
class myClass {
l.head foo;// cannot refer to type member 'head' in 'myList<int, nullList>' with '.'
}
Технически myList.head должен быть класс, не так ли? Как я могу использовать эту информацию?
Переименуйте свой шаблон, например. 'mylist', чтобы избежать конфликтов и путаницы с' std :: list'. И, пожалуйста, прочитайте хорошую [C++ programming] (http://www.stroustrup.com/programming.html) книгу. –
Вы должны объяснить, почему вы считаете, что шаблон списка должен иметь два параметра шаблона. Я предполагаю, что он должен иметь только один (тип данных внутри элементов списка). Или ваше имя 'myList' запутывает: вы * не * имеете дело с любым списком. –
@BasileStarynkevitch Потому что это список типов, а не список значений. Такой шаблон списка довольно распространен в мета-программировании шаблонов, который, как я полагаю, является тем, чему в настоящее время занимается ОП. – sepp2k