【发布时间】:2012-03-02 09:29:38
【问题描述】:
感谢您为以下提供 cmets。
Class1 { debug(std::ostream&){} };
int main() {
std::vector<Class1*> list1;
// some work to do
}
目标平台:
- 平台(1):Win 7x64,VS2010
- 平台(2):Linux x32,g++ 4.4
问:将“std::cout”传递给以下语句的正确方法应该是什么?
std::for_each(list1.begin(),
list1.end(),
"afunction(&Class1::debug, std::cout)");
我之前在 debug() 函数中使用了“std::cout”,但后来考虑为调试消息的输出提供灵活性。
编辑:更多信息:如果函子对象是要走的路,我应该如何实现函子来处理多个类(这些类除了相同的“调试”函数签名之外没有关系)?
Edit(2):使用“std::for_each”,是否可以通过直接为每个类调用相应的析构函数来销毁 list1 中的所有对象? (例如 for_each(l.begin(), l.end(), "Class::~Class1");
Edit(3):根据“pmr”的建议,我将声明设为
std::for_each(l.begin(),
l.end(),
std::bind2nd(std::mem_fn(&Class1::debug), out) );
在linux平台编译运行正常,VS2010编译失败,Class1::debug代码为
void Class1::debug(const std::ostream& out)
{
out << "some text" << someVar << "some text" << std::endl;
}
VS 错误消息是
错误 C2678: 二进制 '
有什么提示吗?
[关闭] 我现在为我的类实现了重载运算符
【问题讨论】:
标签: c++ foreach member-function-pointers