我想为字符串创建一个wrapperClass。我还希望该类能够返回wrapperClass的地址和存储(包装)字符串的地址:
void FunctionString(string*);
void FunctionWrappedString(wrappedString*);
int main(){
wrappedString wrappedStringObject;
FunctionString(&wrappedStringObject);
FunctionWrappedString(&wrappedStringObject);
wrappedString anotherWrappedStringObject;
if(wrappedStringObject == anotherWrappedStringObject){
// code
}
}
以下是该课程的重要部分:
class wrappedString{
typedef char* string;
string storedString;
operator string*(){
// some code
return &storedString;
}
operator wrapperString*(){
// some code
return this;
}
operator string(){
// some code
return storedString;
}
}
但是当我使用比较运算符时,这些都会失败:
if(wrappedStringObject == anotherWrappedStringObject){
// code
}
说候选者是:operator ==(string,string)和operator ==(string *,string *)
答案 0 :(得分:0)
多个隐式转换运算符导致此问题。如果目标是让包裹的string
对象表现得像string
(实际上是char*
?!?),那么只允许一个隐式强制转换运算符,而剩下的explicit
{ {1}}以减少不当行为的风险。这仅适用于C ++ 11,但你现在应该使用它:
class wrappedString{
typedef char* string;
string storedString;
explicit operator string*(){
// some code
return &storedString;
}
explicit operator wrapperString*(){
// some code
return this;
}
operator string(){
// some code
return storedString;
}
}
根据该定义,if(wrappedStringObject == anotherWrappedStringObject){
只会使用string
重载,而不是string*
重载。