作为一些初学者c ++模板练习的一部分,我试图在c ++中编写一个模板作为std :: vector的包装器,并且我遇到了障碍。
假设我将要使用的变量类型是int,double和string。
我试图写一个循环来填充向量:
type element;
while (element != 0){
std::cout << "Enter an element, use 0 to exit: ";
std::cin >> element;
if(element != 0)
items.push_back(element);
}
问题是,虽然这适用于int&amp; double,它不能与std :: string一起使用,因为string不支持!=。我也可以看到自己在计算向量中的最大值/小值时遇到问题。
解决此问题的最佳方法是什么?
答案 0 :(得分:3)
你可以提供一个可选的模板参数,它是一个比较器(我认为标准的lib经常这样做)。不那么野心勃勃,您可以使用类型{}来比较哪个应该适用于任何具有默认ctor的任何内容:if(element != type{})
。 (你的问题不是字符串没有比较运算符,而是没有定义运算符来与int进行比较)。