存档

文章标签 ‘variadic templates’

漫话C++0x(六)—- variadic templates

2011年11月20日 3 条评论

熟悉printf/scanf的朋友应该对C/C++中的变参函数不陌生,它可以支持任意个数的参数。模板(template)在C++中的地位相信不用我再多说,但是,一直以来,C++模板不支持变参,这成了模板一个被诟病的地方,在很多使用场景限制了模板的威力。举例来说,同样语义的模板函数,因为参数个数不定,有若干个,这样的场景之下,我们只能通过枚举的方式来实现。这样的方法,一方面使得代码本身不够简洁,另一方面因为枚举只能做到有限个数的参数,还是在一定程度上限制了使用的灵活性。现在,C++0x引入了变参模板,上面讲的问题便迎刃而解了,这对C++程序员朋友们来说是莫大的福音。下面我们先看一个简单的例子,先对变参模板有一个直观的印象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include < iostream>
#include < string>
 
void Print()
{
    std::cout < < "\n";
}
 
template< typename T, typename ... TRest>
void Print(const T& obj, const TRest& ... rest)
{
    std::cout < < obj << " ";
    Print(rest ...);
}
 
int main()
{
    double p = 3.14;
    std::string s("pi");
    Print(p, &p, s, &s);
}

阅读全文…