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

时间:2011-04-08 21:32:36

标签: c++ scripting function-pointers

我可以从函数指针中提取额外信息(如参数数量及其类型)吗?如果(很可能)没有,那么允许程序员传入函数指针和变量数量的参数 EDIT: I meant that it should allow functions with different number of arguments的最佳方法是什么,同时确保程序员确实不传递不正确的参数类型。

我想做什么: 将函数及其参数暴露给脚本语言,而无需程序员手动输入参数(因此允许在程序员传递函数指针和函数接收的错误参数的情况下发生错误)。

稍微澄清一下:我应该能够输出函数名称和参数类型以用于文档目的。

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

詹姆斯的回答正是我所寻求的。这是代码,因为它是一个复杂,应该可以帮助任何人陷入相同的情况。

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;

4 个答案:

答案 0 :(得分:3)

您可以使用function_traits from the Boost.TypeTraits library获取函数的arity,返回类型和参数类型。

为了完全启用你所描述的具有类型安全的可变函数功能的场景,你真的需要可变参数模板,在C ++ 0x中添加一个新功能,并且由一些最近发布的编译器支持(例如,Clang, GCC)。如果你需要更广泛的东西,你可能需要实现自己的运行时类型系统。

答案 1 :(得分:0)

我并不完全清楚你所追求的是什么,但是boostfunction_types可以告诉你函数指针的返回类型,参数个数和参数类型。

答案 2 :(得分:0)

您可能需要考虑使用Boost::Function库和Boost::TypeTraits。我发现Boost :: Function使函数指针更易于处理,并允许您以通用方式使用函数对象(即,您不受函数对象的类型约束,这是一个痛苦),这些都比原始函数指针

答案 3 :(得分:0)

您可以将doxygen xml output转换为脚本语言的正确声明/元数据。 this other question中的信息可能会帮助您入门。否则SWIG可能对您有所帮助,它可以用于生成跨语言包装器,并且可能生成与您选择的脚本语言兼容的。