【发布时间】:2015-10-14 06:59:11
【问题描述】:
我在接受回调的 lib 中有函数,比如说 foo:
typedef void (*CallbackType)(unsigned int);
void foo(const tchar* path, CallBackType); // library function
static void boo(unsigned int percent)
{
static ProgressBarClass progressBar;
progressBar.setProgressValue(percent);
}
但我不能让对象 progressBar 是静态的,所以我想我会绑定对它的引用:
static void boo(unsigned int percent, ProgressBarClass& progressBar)
{
progressBar.setProgressValue(percent);
}
void something() {
ProgressBarClass progressBar;
tr1::function<static void(unsigned int)> f = tr1::bind(boo, tr1::placeholders::_1, tr1::ref(progressBar));
foo(someWCHARPath, f);
}
但我当然不能将 tr1::function 转换为 ansi c 回调,所以问题是有什么好的和干净的我能做什么?我可以将 progressBar 绑定到 ansic 回调吗?
【问题讨论】:
-
您的参考“解决方案”将被破坏,因为
progressBar的生命周期在something返回时结束。 -
foo 使用回调填充进度条,因此不会被破坏。
-
我认为
foo是异步的。脑部故障,抱歉。 -
“ansi c 回调”到底是什么意思?一个可以通过函数指针调用的普通函数?
-
@Lundin, typedef void (*CallbackType)(unsigned int) 对我来说意味着 ansi c 回调:)