有沒有辦法初始化一個物件,呼叫它的一些方法(不可能只是將物件構造為處于所需狀態),然后將它作為引數傳遞給函式,可能還有單行,只是在呼叫范圍內?像這樣的東西:
#include <iostream>
#include <sstream>
void log(const std::ostringstream& obj) {
std::cout<<obj.str();
//Do something meaningful with obj that doesn't modify it
}
void gol(const std::string& obj) {
std::cout<<obj;
//Do something meaningful with obj that doesn't modify it
}
int main() {
log(std::ostringstream oss << "Foo" << 123 << 'B');
gol(std::string str .append("Foo").append(std::to_string(123)).append("Bar"));
}
“在呼叫范圍內”是指物件“oss”在“log”回傳后自動銷毀。“str”也是如此。
我可以這樣做:
int main() {
{
std::ostringstream oss;
oss << "Foo" << 123 << 'B';
log(oss);
}
{
std::string str;
str.append("Foo").append(std::to_string(123)).append("Bar"));
gol(str);
}
}
但后來它不再是真正的單線了。
uj5u.com熱心網友回復:
你可以這樣寫:
#include <iostream>
#include <sstream>
void log(const std::ostringstream& obj) {
std::cout<<obj.str();
//Do something meaningful with obj that doesn't modify it
}
void gol(const std::string& obj) {
std::cout<<obj;
//Do something meaningful with obj that doesn't modify it
}
int main() {
log(std::ostringstream{} << "Foo" << 123 << 'B');
gol(std::string{}.append("Foo").append(std::to_string(123)).append("Bar"));
}
雖然,我不知道如何給它命名、呼叫方法并將其傳遞給另一個函式,所有這些都在同一個運算式中。
一般來說,試圖將盡可能多的代碼壓縮到一行中并不是真正可取的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488764.html
上一篇:如何在同一物件的回圈中合并陣列?
下一篇:如何將用戶輸入傳遞給類的物件?
