【发布时间】:2009-09-04 19:13:44
【问题描述】:
阅读this answer 后,我认为我有一个解决方案。至少答案是我想做的,但我在实施时遇到了问题。
这是我想要做的事情的大纲
typedef map<string, double*> myMap;
typedef int (*ftwpt)(const char*, const struct stat*, int);
typedef boost::function<int(const char*, const struct stat*, int)> MyFTWFunction;
int myFunction(const char*, const struct stat*, int, myMap*);
int main()
{
myMap m_map;
char tmpdir[] = "/tmp/mytmp";
MyFTWFunction f = boost::bind(myFunction,_1,_2,_3, &m_map);
ftwpt* fpt = f.target<ftwpt>();
if (fpt)
status = ftw(tmpdir, *fpt, 50);
else
{
cout << "Boost could not perform runtime conversion on function pointer" << endl;
return (EXIT_FAILURE);
}
}
程序编译时没有错误或警告,但我得到一个从 f.target() 返回的空指针 (fpt);在运行时。从上述 stackoverflow 问题上链接的引用看来,如果 boost 无法执行运行时转换,则似乎返回了一个空指针。但我不知道为什么 Boost 可能无法执行运行时转换。有什么想法吗?
【问题讨论】:
-
@Konrad 在另一个问题上也解释了您的代码失败的原因:stackoverflow.com/questions/282372/…
-
@HazyBlueDot - 这个问题是关于 C++,而不是 C。请尝试正确标记它。
标签: c++ boost function-pointers boost-bind