std::tuple
의 각 요소에 대해 연산을 수행하는 함수를 작성하려고하지만 요소가 특정 유형 인 경우 하나의 작업 만 수행하도록 특수화했습니다. 다른 유형이라면 다른 일을 할 것입니다. 나는 모든 요소에 같은 일을 할 수있는 코드가 있습니다유형별로 튜플 요소에 대한 특수 함수를 만드는 방법
template<std::size_t I = 0, class ...Ts>
inline typename std::enable_if<I == sizeof...(Ts), void>::type
tupel_el_func(std::tuple<Ts...> &t) { } // base case: do nothing
template<std::size_t I = 0, class... Ts>
inline constexpr typename std::enable_if<I < sizeof...(Ts), void>::type
tupel_el_func(std::tuple<Ts...> &t) {
auto el = std::get<I>(t);
// do thing with el
tupel_el_func<I+1, Ts...>(t);
}
을하지만 지금은 특정 유형 (예를 들어, 유형 char*
)의있는 요소에 대해 다른 일을하기 위해이 기능을 전문화 할 필요가있다. 그래서 같은 std::enable_if
를 사용하여 시도했지만 그것은 컴파일되지 않습니다 :
template<int N, typename... Ts>
using NthTypeOf = typename std::tuple_element<N, std::tuple<Ts...>>::type;
template<std::size_t I = 0, class... Ts>
inline constexpr typename std::enable_if<I < sizeof...(Ts) && std::is_same<char*, NthTypeOf<I, Ts...>>::value, void>::type
tupel_el_func(std::tuple<Ts...> &t) {
// function body for when get<I>(t) is a char*
}
template<std::size_t I = 0, class... Ts>
inline constexpr typename std::enable_if<I < sizeof...(Ts) && !std::is_same<char*, NthTypeOf<I, Ts...>>::value, void>::type
tupel_el_func(std::tuple<Ts...> &t) {
// function body for generic next element
}
이 도움을 주셔서 감사합니다.
당신은 각 유형에 대한 특별한 경우에 대한 논리를 구현 전문/일반 기능 요소 처리 기능의 논리 쓸 수
아니요 C++ 14? 그 나쁜. – Yakk
C++ 11이 아니어야합니다. 14 –
왜 C++ 11입니까? 어떤 컴파일러가 지원해야합니까? 많은 사람들이 C++ 14 기능을 일부 갖추고있어 훨씬 쉽게 사용할 수 있습니다. – Yakk