C++ 我可以从函数指针中提取函数参数吗?

C++ 我可以从函数指针中提取函数参数吗?,c++,scripting,function-pointers,C++,Scripting,Function Pointers,我可以从函数指针中提取额外的信息(如参数数量及其类型)吗?如果(很可能)没有,那么允许程序员传入函数指针和变量数量的参数EDIT的最佳方法是什么:我的意思是,它应该允许函数具有不同数量的参数,同时确保程序员不会传递不正确的参数类型 我想做什么: 向脚本语言公开函数及其参数,而无需程序员手动键入参数(因此,当程序员传递函数指针和函数接受的不正确参数时,会出现错误) 再澄清一点:我应该能够输出函数名和参数类型,用于文档编制 -----------------解决方案-----------------

我可以从函数指针中提取额外的信息(如参数数量及其类型)吗?如果(很可能)没有,那么允许程序员传入函数指针和变量数量的参数
EDIT的最佳方法是什么:我的意思是,它应该允许函数具有不同数量的参数,同时确保程序员不会传递不正确的参数类型

我想做什么: 向脚本语言公开函数及其参数,而无需程序员手动键入参数(因此,当程序员传递函数指针和函数接受的不正确参数时,会出现错误)

再澄清一点:我应该能够输出函数名和参数类型,用于文档编制

-----------------解决方案-----------------

詹姆斯的答案正是我想要的。这里是代码,因为它有点复杂,应该可以帮助任何人陷入同样的情况

boost::function_traits<boost::remove_pointer
                         <BOOST_TYPEOF(&SomeFunction)>::type>::arg2_type);
boost::function\u traits::arg2\u type);
如果您需要输出,请使用RTTI(假设您在编译器中启用了RTTI)


std::cout您可以使用获取函数的arity、返回类型和参数类型


要完全启用所描述的具有类型安全的有效可变函数的场景,您确实需要可变模板,这是在C++0x中添加的一个新功能,并由一些最近发布的编译器(例如Clang、gcc)支持。如果您需要更广泛的内容,您可能需要实现自己的运行时类型系统。

我不完全清楚您想要什么,但是。可以告诉您函数指针的返回类型、参数数目和参数类型。

,您可能需要考虑使用库和。我发现Boost::Function使函数指针更容易处理,并允许您以通用方式使用函数对象(即,您不受函数对象类型的限制,这是一种痛苦),所有这些都比原始函数指针好得多

您可能可以将它们转换为脚本语言的正确声明/元数据。中的信息可能会帮助您开始。否则可能会对您有所帮助,它是为生成跨语言包装而设计的,并且可能会生成与您选择的脚本语言兼容的包装。

您所说的“可变参数数”是什么意思?您的意思是某些函数将具有可变参数,还是不同的函数将具有不同数量的参数。您必须在编译时使用正确数量的参数调用函数(指针)。你所描述的没有意义。@David:不同的函数会有不同数量的arguments@Oli当前位置描述的方法可能有点不连贯,但表达的目标非常合理,至少对我来说是这样。从VB或.NET调用WinAPI(或任何本机DLL)函数时,必须生成描述要导入的函数(包括所有参数)的匹配声明。他似乎想从C++类型的信息中自动地做这件事。@本:我的印象是,他/她想在运行时能够动态调用任意函数。尽管我选择了这个答案作为正确答案,我还没有弄清楚如何让
功能特征
与函数一起工作,而不仅仅是它们的类型(例如,传入
功能特征
而不是
功能特征
),我已经弄清楚了。请参阅我原始问题中的编辑。感谢詹姆斯的建议,这正是我所需要的。
std::cout << typeid(boost::function_traits<boost::remove_pointer
    <BOOST_TYPEOF(&SomeFunction)>::type>::arg2_type).name() << std::endl;