[英]How to typecast class a to class b in c++
为什么 ostringstream 到 ostream 类型转换工作但反之不工作?
int main()
{
//part #1
ostringstream oss;
ostream& os=oss ;
// ^^ It works
//part #2
ostream os2 ;
ostringstream& oss2=os2;
cout <<"address is "<<&oss;
// ^^ It doesn't work
return 0;
}
代码的第 2 部分引发错误
“错误:'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]' 在此上下文中受到保护”。
我该如何解决这个问题?
编辑:-看看这段代码,我想在 curlCall function 中访问响应而不对任何函数的参数进行任何更改
size_t CurlDataWrite(void* buf,size_t size,size_t nmemb,void* userp)
{
//code to write stream
ostream& os=*static_cast<ostream*>(userp);
streamsize len=size*nmemb ;
if(os.write(static_cast<char*> (buf),len))
return len ;
return 0 ;
}
void curlCall(ostream& os)
{
CURL* curl=curl_easy_init();
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,&CurlDataWrite) ;
curl_easy_setopt(curl,CURL_FILE,&os);
curl_easy_setopt(curl,CURLOPT_URL, "https://something.com");
int code=curl_easy_perform(curl) ;
//how to get curl response here instead of in main function ????
}
int main()
{
ostringstream oss;
curlCall(oss);
//i can get response here by calling the following code
cout << oss.str();
return 0;
}
如何在此处而不是在主要 function 中获得 curl 响应?
void curlCall(ostream& os)
不是为此而设计的。 因此,您可以执行以下操作之一:
curlCall
接口,以便它可以执行此操作(这意味着将ostream
参数类型更改为ostringstream
)curlCall
中执行此操作如果您想在curlCall
中执行此操作而不更改curlCall
接口,那么您有自相矛盾的要求。
查看您对 Jarod42 的回答的回复,这似乎更像是一个重构问题。 您的问题是您的 go 来自 ostream -> ostringstream -> ostream,一个可能的解决方案是您应该只保留 function 通用并采用 ostream 代替或分离这两个功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.