템플릿 튜플: 각 요소에서 함수 호출
목표는 템플릿 튜플 std의 각 요소에서 함수를 호출하는 것입니다. 튜플
해결책
일부 메타-사용 프로그래밍 기술은 이러한 문제를 우아하게 해결할 수 있습니다. 컴파일 타임 시퀀스와 동반 함수 템플릿을 생성하는 메타 함수 gen_seq를 사용하면 다음과 같은 메커니즘을 구현할 수 있습니다.
<code class="cpp">namespace detail { template<int... Is> struct seq { }; template<int N, int... Is> struct gen_seq : gen_seq<N - 1, N - 1, Is...> { }; template<int... Is> struct gen_seq<0, Is...> : seq<Is...> { }; }</code>
<code class="cpp">#include <tuple> namespace detail { template<typename T, typename F, int... Is> void for_each(T& t, F f, seq<Is...>) { auto l = { (f(std::get<Is>(t)), 0)... }; } } template<typename... Ts, typename F> void for_each_in_tuple(std::tuple<Ts...>& t, F f) { detail::for_each(t, f, detail::gen_seq<sizeof...(Ts)>()); }</code>
아래 설명과 같이 for_each_in_tuple을 활용할 수 있습니다.
<code class="cpp">#include <string> #include <iostream> struct my_functor { template<typename T> void operator () (T& t) { std::cout << t << std::endl; } }; int main() { std::tuple<int, double, std::string> t(42, 3.14, "Hello World!"); for_each_in_tuple(t, my_functor()); }</code>
귀하의 경우에는 다음과 같이 활용하실 수 있습니다.
<code class="cpp">template<typename... Ts> struct TupleOfVectors { std::tuple<std::vector<Ts>...> t; void do_something_to_each_vec() { for_each_in_tuple(t, tuple_vector_functor()); } struct tuple_vector_functor { template<typename T> void operator () (T const &v) { // Perform operations on the vector argument... } }; };</code>
위 내용은 메타프로그래밍을 사용하여 벡터 튜플의 각 요소에 함수를 적용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!