我在一个代码库中,对函数有很多函数调用,它们将指针作为参数。但是,函数调用传递一个“字符串”对象,就像它的指针一样。以下代码显示给您一个想法。
#include <vector>
#include <unordered_map>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <string>
using namespace std;
void dum(char *s) {
printf("%s\n", s);
}
operator char* (string s) {
return s.c_str();
}
int main(int argc,char *argv[]) {
string st("Hello world");
dum(st);
return 0;
}
我不允许更改所有这些函数或函数调用的语法。我提出的一个可能的解决方案是添加一个运算符重载,但遗憾的是它不起作用,这是g ++(ver 4.7.3)的错误,命令行:g++ -std=c++11 te2.cc
error: ‘operator char*(std::string)’ must be a nonstatic member function
有什么想法吗?感谢。
UPDATE1
dum(dum2());
其中dum2()是一个函数,如:
string dum2() {
string s;
//.....
return s;
}
因此,如下所示的包装器不起作用(),编译器会给出错误no matching function for call to ‘dum(std::string)’
void dum(string &s) {
dum(s.c_str());
}
答案 0 :(得分:4)
operator char* (string s) {
return s.c_str();
}
这是破碎的(如果允许的话)。当此函数返回时,s
不再存在。因此,指向其内容的指针毫无用处。
答案 1 :(得分:3)
您可以为每个带char*
的函数添加一个简单的函数重载。 e.g。
void dum(const string& s) {
dum(s.c_str());
}