Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[C++] C++17의 Template argument deduction (템플릿 인자 추론) 본문
https://en.cppreference.com/w/cpp/language/template_argument_deduction
템플릿 인자 추론은 익숙한 문법이지만 C++17부터 기능이 더 확장되었습니다.
템플릿 클래스가 객체 생성의 타입으로 사용되는 경우에도 추론이 수행되도록 말이죠!
이게 무슨 말이냐... 아래 코드를 보시면 바로 이해가 되실겁니다.
#include <iostream>
using namespace std;
template <typename T>
class Foo
{
public:
Foo(const T& data) : data(data)
{ }
T data;
};
int main()
{
Foo a = 42;
auto f = Foo{ a.data };
cout << f.data << endl;
return 0;
}
위 코드는 C++17 미만에서는 컴파일이 안됩니다!
C++14 이하에서는 Foo a 대신 Foo<int> a를, Foo{ .. } 대신 Foo<int>{ .. }를 써야 컴파일이 되죠.
하지만 이젠 그럴 필요가 없습니다!
std::pair p(2, 4.5);
std::tuple t(4, 3, 2.5);
std::copy_n(vi1, 3, std::back_insert_iterator(vi2));
std::for_each(vi.begin(), vi.end(), Foo([&](int i) {...}));
auto lck = std::lock_guard(foo.mtx);
std::lock_guard lck2(foo.mtx, ul);
std::vector v{ 1, 2, 3 };
이 얼마나 깔끔한 코드인가...
꺌룰랭~
'개발 및 공부 > 언어' 카테고리의 다른 글
[C++] Three-way comparison (0) | 2018.09.10 |
---|---|
[C++] CTAD; User-defined deduction guides (사용자 정의 템플릿 인자 추론 가이드) (0) | 2018.09.10 |
[C++] Fold Expressions (0) | 2018.09.05 |
[C++] lock tag(defer_lock, try_to_lock, adopt_lock) 설명 + scoped_lock (0) | 2018.08.26 |
[Rust] in/exclusive range expression and pattern (0) | 2018.08.25 |
Comments