-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathPackExpansion1.cpp
53 lines (31 loc) · 970 Bytes
/
PackExpansion1.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
* HOME : ecourse.co.kr
* EMAIL : smkang @ codenuri.co.kr
* COURSENAME : C++ Template Programming
* MODULE : PackExpansion1.cpp
* Copyright (C) 2017 CODENURI Inc. All rights reserved.
*/
#include <iostream>
using namespace std;
void goo(int a, int b, int c)
{
cout << a << ", " << b << ", " << c << endl;
}
int hoo(int a) { return -a; }
// Pack Expansion : (packÀ» »ç¿ëÇÏ´Â ÆÐÅÏ)...
template<typename ... Types> void foo(Types ... args) // args : 1,2,3
{
//int ar[] = { args... }; // 1, 2, 3
//int ar[] = { (++args)... }; // ++E1, ++E2, ++E3, ++1, ++2, ++3
//int ar[] = { hoo(args...) }; // hoo(1,2,3) error
int ar[] = { hoo(args)... }; // { hoo(1), hoo(2), hoo(3) }
goo(args...); // goo( 1, 2, 3)
goo(hoo(args)...); // goo( hoo(1), hoo(2), hoo(3))
goo(hoo(args...)); // goo( hoo( 1,2,3)) // error
for (int n : ar)
cout << n << endl;
}
int main()
{
foo(1, 2, 3);
}