我目前正致力于用c ++创建一个控制台。我创建了一个类来帮助将代码中的变量和函数链接到控制台中的变量和函数。
我目前已将它设置在哪里如果我在代码中有变量,我可以在新类下重新定义它并且它将对控制台可见。代码中的变量仍然与以前相同。
示例:
float var = 1.0;
可以重新定义为
ConsoleVar var("myVariable")<float> = 1.0;
var是代码中的变量名称,myVariable是您在终端中用来访问它的名称
我的问题是:
如何绑定函数,或者更具体地说,检测参数的数量和类型。
我知道我可以将ConsoleVar
类模板化为void *
类型来存储函数,但有没有办法让我自动检测返回类型,参数数量和参数类型?我打算把它运到图书馆,所以我很容易使用。如果这是可能的,我真的很想知道(如果需要我甚至可以进行组装),否则我对如何实现它有一些想法。
编辑:所以我认为我有一个解决方案,但我有一个问题......是否可以将一个可变数量的参数传递给一个函数。不像varargs。
例如:我从命令行收到3个args,现在我执行函数
func(arg[1], arg[2], arg[3])
是否可以发送可变数量的参数?
答案 0 :(得分:1)
这种模式可以胜任。
#include <typeinfo>
// Function with 0 parameters
template< typename Ret >
void examine_function( Ret (*func)() )
{
std::cout << typeinfo(Ret).name() << std::endl;
}
// Function with 1 parameters
template< typename Ret, typename Param1 >
void examine_function( Ret (*func)(Param1) )
{
std::cout << typeinfo(Ret).name() << std::endl;
std::cout << typeinfo(Param1).name() << std::endl;
}
// Function with 2 parameters
template< typename Ret, typename Param1, typename Param2 >
void examine_function( Ret (*func)(Param1, Param2) )
{
std::cout << typeinfo(Ret).name() << std::endl;
std::cout << typeinfo(Param1).name() << std::endl;
std::cout << typeinfo(Param2).name() << std::endl;
}