在可变参数函数中获取传递参数的类型

时间:2010-08-25 08:27:06

标签: c++ variadic-functions

是否有任何技巧可以获取传入参数的类型而不明确地将字符串中的类型声明为参数之一?

刚刚添加帖子,基本上我想做的是

如果是A型

致电功能A

否则如果是B型

致电functionB。

variadic模板可以解决这个问题吗?

感谢。

2 个答案:

答案 0 :(得分:3)

不,如果它们的类型可能不同,则需要传递某种结构来指定这些类型。

另请注意,只允许某些类型,并且最好将其限制为指针。

Variadic 模板解决了这个问题。但是,您需要一个更新的编译器,模板需要存在于头文件中。为每个唯一的参数类型序列生成一个单独的函数。

答案 1 :(得分:3)

可变参数模板肯定能解决这个问题:

#include <cstdio>

void function_a(int a) { printf("int %d\n", a); }
void function_b(double b) { printf("double %f\n", b); }

void select(int n) { function_a(n); }
void select(double d) { function_b(d); }

template <class T>
void variadic(T a)
{
    select(a);
}

template <class T, class ...Args>
void variadic(T a, Args... args)
{
    select(a);
    variadic(args...);
}

int main()
{
    variadic(1, 3, 2.1, 5.6, 0);
}

但这仅适用于C ++ 0x。

如果你的意思是var_args中的可变函数,那么这些参数不带任何类型信息。