謝謝你給意見如下。成員函數指針列表
Class1 { debug(std::ostream&){} };
int main() {
std::vector<Class1*> list1;
// some work to do
}
目標平臺:
- 平臺(1):運7x64,VS2010
- 平臺(2):Linux的32倍,克++ 4.4
問:將「std :: cout」傳遞給以下語句的正確方法是什麼?
std::for_each(list1.begin(),
list1.end(),
"afunction(&Class1::debug, std::cout)");
我以前使用的「性病::法院」調試()函數內部,但後來考慮到給靈活性調試信息的輸出。
編輯:更多信息:如果仿的對象是要走的路,應該怎麼實現函子,以應付多個類(這些類,除了有相同的「調試」函數簽名沒有關係)?
編輯(2):使用「的std :: for_each的」,是有可能通過調用相應的析構函數直接每個類摧毀list1的所有對象? (如的for_each(l.begin(),l.end(), 「類::〜1類」);
編輯(3):按照 「PMR」 的建議,我讓語句
std::for_each(l.begin(),
l.end(),
std::bind2nd(std::mem_fn(&Class1::debug), out));
它編譯和正確地在Linux平臺上運行,但未能在VS2010中,代碼的Class1 ::調試是
void Class1::debug(const std::ostream& out)
{
out << "some text" << someVar << "some text" << std::endl;
}
的VS錯誤味精是
錯誤C2678:二進制 '< <':沒有操作ATOR發現它接受一個左邊的操作數類型「常量性病的ostream ::」的(或不存在可接受的轉化率)
任何線索?
[已結算] 我現在爲我的類實現了重載運算符< <,並關閉了調試打印函數的使用。非常感謝所有提示。
我遵循你的建議,它編譯到一些點,但它在MS VS2010失敗,拋出錯誤「錯誤C2678:二進制'<<':找不到操作符,它需要類型爲'const std ::'的左操作數ostream'(或者沒有可接受的轉換)「 – 2012-03-05 03:03:18
我在示例代碼中看不到任何'operator <<'。問題可能出在你輸出的方式上。不要''const''用'ostream',而用'&'代替。這應該解決它。 – pmr 2012-03-05 09:27:04