【发布时间】:2011-04-08 21:32:36
【问题描述】:
我可以从函数指针中提取额外信息(如参数数量及其类型)吗?如果(很可能)不是,那么允许程序员传入函数指针和 可变数量的参数 EDIT: I meant that it should allow functions with different number of arguments 的最佳方法是什么,同时确保程序员不会通过参数类型不正确。
我想做的事: 将函数及其参数公开给脚本语言,而无需程序员手动输入参数(因此在程序员传递函数指针和函数接受的不正确参数时会出现错误)。
再澄清一点:我应该能够输出函数名称和参数类型以用于文档目的。
----------------- 解决方案 -----------------
James 的答案正是我想要的。这是代码,因为它是一个复杂的位,应该可以帮助任何陷入相同情况的人。
boost::function_traits<boost::remove_pointer
<BOOST_TYPEOF(&SomeFunction)>::type>::arg2_type);
如果您需要输出,请使用 RTTI(假设您在编译器中启用了 RTTI)
std::cout << typeid(boost::function_traits<boost::remove_pointer
<BOOST_TYPEOF(&SomeFunction)>::type>::arg2_type).name() << std::endl;
【问题讨论】:
-
“可变数量的参数”是什么意思?你的意思是有些函数会有可变参数,还是说不同的函数会有不同数量的参数。
-
您必须在编译时调用具有正确数量参数的函数(指针)。你所描述的没有意义。
-
@David:不同的函数会有不同数量的参数
-
@Oli:所描述的方法可能有点不连贯,但表达的目标非常有意义,至少对我而言。曾经从 VB 或 .NET 调用过 WinAPI(或任何本机 DLL)函数,您必须生成匹配的声明来描述要导入的函数,包括所有参数。他似乎想从 C++ 类型信息中自动执行此操作。
-
@Ben:我的印象是他/她希望能够在运行时动态调用任意函数。
标签: c++ scripting function-pointers