繁体   English   中英

如何在 c++ 中将 class a 类型转换为 class b

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM