我目前正在使用 C++ 创建一个控制台。我创建了一个类来帮助将代码中的变量和函数链接到控制台中的变量和函数。
我目前将它设置为如果我在代码中有一个变量,我可以在新类下重新定义它并且它将对控制台可见。代码中的变量仍然表现得和以前一样。
例子:
float var = 1.0;
可以重新定义为
ConsoleVar var("myVariable")<float> = 1.0;
var 是代码中的变量名,myVariable 是您用来在终端中访问它的名称
我的问题是:
如何绑定(bind)一个函数,或者更具体地说,如何检测参数的数量和类型。
我知道我可以模板 ConsoleVar
类到 void *
type 来存储一个函数,但是有没有办法让我自动检测返回类型、参数数量和参数类型?我计划将其运送到图书馆,以便于使用。如果可能的话,我真的很想知道(如果需要我什至会进行组装)否则我对如何实现它有一些想法。
编辑:所以我认为我有一个解决方案,但我有一个问题......是否可以将可变数量的参数传递给函数。不像可变参数。
例如:我从命令行接收到 3 个参数,现在我执行函数
func(arg[1], arg[2], arg[3])
是否可以发送可变数量的参数?
最佳答案
此模式将完成这项工作。
#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;
}
关于C++制作控制台: binding a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221081/