[英]string to char* conversion
我在一個代碼庫中,其中有許多函數調用以指針作為參數的函數。 但是,函數調用將“字符串”對象傳遞為指針。 下面的代碼顯示給您一個想法。
#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
有任何想法嗎? 謝謝。
更新1
@ferruccio的回答提醒我提到有一些函數調用,例如
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());
}
operator char* (string s) {
return s.c_str();
}
這是損壞的(如果允許的話)。 當此函數返回時, s
不再存在。 因此,指向其內容的指針毫無用處。
您可以為每個采用char*
函數添加一個簡單的函數重載。 例如
void dum(const string& s) {
dum(s.c_str());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.