2012-03-08 71 views
11

我使用register_callback()来注册iostream的回调函数,如 Standard C++ IOStreams and Locales,页码: 202.取消注册通过register_callback()注册的回调?

但是,无论是它还是我所能找到的任何文档都无法说明如何取消注册回拨。可能吗?如果我要将我正在使用的Iword/pword清零,甚至需要注销?

+3

+1为尝试使用我甚至不知道的东西存在。 – Nawaz 2012-03-08 15:43:19

+2

勇敢。所有先进的iostream的东西基本上是不收费的领土。关于这个主题有一本书,但除了作者以外,很少有人真正深入了解这些细节。 – jalf 2012-03-08 15:48:29

+1

@jalf:这可能是因为IOstream通常很糟糕。 :)它们可能强大且真正可扩展,但它们复杂而复杂。可悲的是,关于新的I/O风格/库似乎没有任何变化。 – Xeo 2012-03-08 15:53:33

回答

8

register_callback函数注册您的特定流对象的回调。摆脱注册的方法是让流程超出范围。

如果你需要你的回调函数来完成它的一部分生命周期的工作,那么你可以用回调函数存储这个条件,并让它不做任何事情。

清除iword/pword并没有帮助(除了它可能是回调信号不做任何事情的信号),并且无法取消注册。

+0

选项#1(流超出范围)不是类似cout的流的选项。 选项#2(用回调存储条件)似乎有问题,因为它只是一个普通的函数而不是函数对象,因此实际上没有存储额外信息的好地方。 (相同的回调可以被多个流使用。) 选项#3(清除iword/pword)是我现在要做的。我只是想看看有没有更好的东西。 – 2012-03-08 16:38:54