我使用register_callback()
来注册iostream的回调函数,如 Standard C++ IOStreams and Locales,页码: 202.取消注册通过register_callback()注册的回调?
但是,无论是它还是我所能找到的任何文档都无法说明如何取消注册回拨。可能吗?如果我要将我正在使用的Iword/pword清零,甚至需要注销?
我使用register_callback()
来注册iostream的回调函数,如 Standard C++ IOStreams and Locales,页码: 202.取消注册通过register_callback()注册的回调?
但是,无论是它还是我所能找到的任何文档都无法说明如何取消注册回拨。可能吗?如果我要将我正在使用的Iword/pword清零,甚至需要注销?
register_callback函数注册您的特定流对象的回调。摆脱注册的方法是让流程超出范围。
如果你需要你的回调函数来完成它的一部分生命周期的工作,那么你可以用回调函数存储这个条件,并让它不做任何事情。
清除iword/pword并没有帮助(除了它可能是回调信号不做任何事情的信号),并且无法取消注册。
选项#1(流超出范围)不是类似cout的流的选项。 选项#2(用回调存储条件)似乎有问题,因为它只是一个普通的函数而不是函数对象,因此实际上没有存储额外信息的好地方。 (相同的回调可以被多个流使用。) 选项#3(清除iword/pword)是我现在要做的。我只是想看看有没有更好的东西。 – 2012-03-08 16:38:54
+1为尝试使用我甚至不知道的东西存在。 – Nawaz 2012-03-08 15:43:19
勇敢。所有先进的iostream的东西基本上是不收费的领土。关于这个主题有一本书,但除了作者以外,很少有人真正深入了解这些细节。 – jalf 2012-03-08 15:48:29
@jalf:这可能是因为IOstream通常很糟糕。 :)它们可能强大且真正可扩展,但它们复杂而复杂。可悲的是,关于新的I/O风格/库似乎没有任何变化。 – Xeo 2012-03-08 15:53:33