给定一个模板类:
template<class T, class U>
struct myList {
typedef T head;
typedef U next;
};
class nullList {};
可以列出类别,例如
myList<int, myList<string, myList<short, nullList> > >;
我正在尝试使用上面的列表来制作仅处理列表中的类的模板类。在上面的示例中,我的班级将处理int,字符串和短裤(例如,将它们打印到控制台)。
我已经为此苦苦挣扎了一段时间,但我什至不知道从哪里开始。任何以开头的代码
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应该是一个类,对吗?我如何利用这些信息?
的.
操作者访问的成员对象。l
不是一个对象-它是一个类。要访问类的静态成员,请使用::
运算符。当您要访问的成员是类型,而要访问它的类是模板参数时,typename
出于语法原因,您还需要关键字。因此,您将成为:
template<typename l>
class myClass {
typename l::head foo;
}
如果您只想打印给定类型的值,而又不想用该类型的成员创建对象,则可以定义一个静态函数,将该类型作为其参数:
template<typename l>
class myClass {
public:
static void print(typename l::head foo) {
std::cout << foo << std::endl;
}
};
实际上,在这种情况下,您只考虑列表的头,根本就不需要一个类,而可以这样做:
template<typename l>
void print(typename l::head foo) {
std::cout << foo << std::endl;
}
但是,一旦开始考虑列表的尾部,您(可能)将需要该类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句