variadic은 variable과 -adic의 합성어이고
variadic template을 해석해보자면
여러 종류의 변수를 취하는 템플릿이라는 뜻이다.
실제로 0개 이상의 변수를 취하여 사용한다.
template<typename ... I> class A;
는
A<> a;
A<int, std::vector<int>> a;
둘다 가능합니다.
이를 이용해서 이런게 가능합니다.
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 | #include <iostream> using namespace std; class A { public: void myPrint() const { cout << "A" << endl; } }; class B { public: void myPrint() const { cout << "B" << endl; } }; template <typename T> void myPrint(const T& Target) { Target.myPrint(); } template <typename T, typename ... Ts> void myPrint(const T& Target, const Ts ... Targets) { Target.myPrint(); myPrint(Targets...); } int main() { A a1, a2, a3, a4, a5; B b1, b2, b3, b4, b5; myPrint(a1, a2, a3, b1, b2, b3, b4, b5, a4, a5); return 0; } | cs |
출력결과
그런데 이걸 이해하여도
make_index_sequence
index_sequence
를 몰라서 코드해석은 못했다고 합니다 ...
보통은 재귀꼴로 unfold 하는데 C++17 unfold expression이 생겨서 또 새로운 문법 나옴 - return 0;
저도 모듈화 나온다는 말은 들었어요.
대충 9 넣으면 0,1,2,3,4,5,6,7,8 이런식으로 만들어 주는형식인거 같은데 정확하게는 모르겠군요