1

我目前正在用 C++ 创建一个控制台。我创建了一个类来帮助将代码中的变量和函数链接到控制台中的变量和函数。

我目前已经将它设置在哪里,如果我在代码中有一个变量,我可以在新类下重新定义它,它将对控制台可见。代码中的变量的行为仍然与以前相同。

例子:

float var = 1.0;

可以重新定义为

ConsoleVar var("myVariable")<float> = 1.0;

var 是代码中的变量名,myVariable 是您在终端中用来访问它的名称

我的问题是:

如何绑定函数,或者更具体地说,检测参数的数量和类型。我知道我可以将ConsoleVar类模板void *化为存储函数的类型,但是有没有办法让我自动检测返回类型、参数数量和参数类型?我打算把它放在图书馆里,所以我要方便使用。如果这是可能的,我真的很想知道(如果需要,我什至会进行组装)否则我对如何实现它有一些想法。

编辑:所以我认为我有一个解决方案,但我有一个问题......是否可以将可变数量的参数传递给函数。不像可变参数。

例如:我从命令行收到 3 个参数,现在我执行函数

func(arg[1], arg[2], arg[3])

是否可以发送可变数量的参数?

4

1 回答 1

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;
}
于 2013-04-25T19:37:08.153 回答