2009年2月14日星期六

template & local class

void qnode::on_poschanged() {
struct pos_changed {
inline void operator ()(qio_input * i) {
i->node_poschanged();
}
};
std::for_each(_inputs.begin(), _inputs.end(), pos_changed());
_output->node_poschanged();
}

以目前的c++标准而言,这段代码是通不过的,不过vc2008还是没问题,ms的人务实,
g++编译错误。
当然这是简单的例子,可以用mem_func糊弄过去,然而复杂点的就麻烦了...
所以为了目前的可移植性,尽量还是把class移出去,这是个让人灰心的解决之道。或者,用boost::lambda来替代.
这对于c++号称oo封装的语言来说,为一个封装的便利付出的代价,够讽刺的。

没有评论:

发表评论