2017-05-08 6 views
-1

가정하자 나는 노동 조합이 전문입니다. 다음과 같은 내용이 있습니다 :C++ 템플릿 방법은 노동 조합 유형

template <typename T> 
T sum(std::vector<U> vec){ 
    T res(0); 
    for (U &v: vec){ 
     res += ... // use v.i or v.f depending on what T is 
    } 
    return res; 
} 

방법이 있습니까? 이것은 단지 예시적인 방법이었습니다. 나는 훨씬 더 길고 복잡한 메소드를 가지고 있으며, 사용하고있는 공용체 유형을 전환하기 위해 그것을 복제하고 싶지는 않습니다.

+0

왜 당신이 말하는'typedef'를? –

+0

typedef없이 노동 조합에 이름을다는 것을 잊었습니다. – Azmisov

답변

2

전문화 작동합니다 :

template <typename T> T const & get(U const &); 

template <> int const & get<int>(U const & u) { return u.i; } 
template <> float const & get<float>(U const & u) { return u.f; } 

사용법 :

for (U & v : vec) { res += get<T>(v); } 
+0

[데모] (https://ideone.com/d231kr) –

+0

흥미 롭습니다. 나는 비슷한 것을 생각하고 있었다. 이게 가장 깨끗한 방법이라고 생각하십니까? – Azmisov

+1

@Azmisov : 노조 벡터를 가지고 시작하면, 우리는 오래 전에 깨끗하게 일한다고 말할 수 있습니다! –