2012-05-31 30 views

Trả lời

11

Điều chắc chắn. Tại sao nó sẽ không được? Khai báo ví dụ về chức năng như vậy:

void my_func(std::ostringstream& ss); 
+0

cảm ơn bạn, rằng những gì tôi bỏ qua, tôi biết nó là hơi có thể nhưng tôi không biết tuyên bố sử dụng để đạt được hiệu ứng đó – rsk82

+2

Ngoại trừ loại 'ss <<" test "<< hex << 33' không 'std :: stringstream &', nhưng 'std :: ostream &', và nó sẽ không khớp với chữ ký đã cho. –

+0

@James Kanze Đó là tất nhiên chính xác. –

7

Tuyệt đối! Hãy chắc chắn rằng bạn vượt qua nó bằng cách tham chiếu, không phải bởi giá trị.

void my_func(ostream& stream) { 
    stream << "Hello!"; 
} 
1

Có nó là, và

Function(expresion) 

sẽ làm cho biểu thức được đánh giá đầu tiên và kết quả của nó sẽ được thông qua như một tham số

Lưu ý: Operator << for ostreams trả về một ostream

3

my_func phải có chữ ký dọc theo các dòng:

void my_func(std::ostream& s); 

, vì đó là loại ss << "text" << hex << 33. Nếu mục tiêu là để trích xuất chuỗi được tạo, you'ld phải làm điều gì đó như:

void 
my_func(std::ostream& s) 
{ 
    std::string data = dynamic_cast<std::ostringstream&>(s).str(); 
    // ... 
} 

Lưu ý rằng bạn không thể sử dụng luồng tạm thời;

my_func(std::ostringstream() << "text" << hex << 33); 

sẽ không biên dịch (ngoại trừ có thể với VC++), vì nó không hợp pháp C++. Bạn có thể viết một cái gì đó như:

my_func(std::ostringstream().flush() << "text" << hex << 33); 

nếu bạn muốn sử dụng tạm thời. Nhưng đó không phải là rất thân thiện với người dùng.

Các vấn đề liên quan