NeuroWhAI의 잡블로그

[C++] C++17의 Template argument deduction (템플릿 인자 추론) 본문

개발 및 공부/언어

[C++] C++17의 Template argument deduction (템플릿 인자 추론)

NeuroWhAI 2018. 9. 9. 12:36


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 };

이 얼마나 깔끔한 코드인가...

꺌룰랭~



Comments