template<typename T> T SmartIO::Peek() {
T temp;
T tempReturn;
while(true){
temp = *(T*)&buffer[ptrSeek];
if(temp !=0){
ptrSeek++;
tempReturn += *(T*)&buffer[ptrSeek];
}
else{
break;
}
}
return tempReturn;
}
所以我想要做的是,从ptrSeek开始读取开始循环,将值添加到temp并检查temp的值!= 0将此值添加到tempReturn,并且一旦temp的值为0就打破循环并返回tempReturn但是它一直给我这个错误:
error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion)
我怎么能在这里解决这个问题?
2 回答
如果您尝试将任意类型
T
与数字常量0进行比较,则模板代码存在一个基本问题,您在此处的代码中执行此操作:这里的问题是
T
是一个任意类型(在这种情况下,你似乎用std::string
实例化模板),但你期望该类型可以与0相比 . 这非常好 - 它只是将T
限制为类型可以与0进行比较 - 但是你不确定你是否意识到这一点 .你的选择要么不用
std::string
作为参数来实例化这个模板(它的方式是's written, I don'认为你不太确定你想要代码做什么,所以在后一种情况下我不确定我是如何协助的 .希望这能澄清事情!
对于与
0
无法直接比较的类型,您可以 specialize or overload 比较部分(此处为!=
) . 举个例子,[以上功能硬连线
0
;它可以根据需要进行推广 . ]