>  기사  >  백엔드 개발  >  \"각 (N): do_something_to_vec()\"과 같은 작업을 효과적으로 수행하기 위해 벡터 템플릿 튜플 내의 각 요소에 함수를 적용하려면 어떻게 해야 합니까?

\"각 (N): do_something_to_vec()\"과 같은 작업을 효과적으로 수행하기 위해 벡터 템플릿 튜플 내의 각 요소에 함수를 적용하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 15:07:02382검색

How can I apply functions to each element within a template tuple of vectors, effectively performing tasks like

템플릿 튜플: 각 요소에 함수 호출

다양한 유형의 벡터로 구성된 템플릿 튜플 내에서 특정 작업을 수행해야 하는 경우가 종종 발생합니다. 각 벡터 요소에 대한 연산을 수행합니다.

질문:

템플릿 튜플 내의 각 요소에 대해 함수를 어떻게 호출하여 "각각에 대해"와 같은 작업을 실행할 수 있습니까? (N): do_something_to_vec()"?

답변:

C 메타 프로그래밍 기술과 함수 템플릿의 조합을 사용하면 우아한 솔루션을 제공합니다.

  • 메타 함수: seq 클래스 템플릿에 캡슐화된 컴파일 타임 정수 시퀀스를 생성하는 메타 함수 gen_seq를 도입합니다.
  • 함수 템플릿: 다음 함수 템플릿을 활용하세요.

    • for_each: 주어진 튜플을 반복하여 각 요소에 제공된 함수를 호출합니다.
    • for_each_in_tuple: 구문 친화적인 기능을 제공합니다. 특히 튜플에 for_each를 사용하기 위한 래퍼입니다.
  • 사용법:

제공된 TupleOfVectors 템플릿의 컨텍스트에서 do_something_to_each_vec 메서드는 다음을 수행할 수 있습니다. 다음과 같이 구현됩니다:

<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 &amp;v) {
            // Perform desired operations on the argument vector...
        }
    };
};</code>
  • 대체 구문(C 14):

C 14 이상을 사용할 수 있는 경우 for_each_in_tuple 함수 std::integer_sequence를 사용하도록 업데이트할 수 있습니다.

  • C 17 단순화:

C 17 이상에서는 간결한 구문이 존재합니다.

<code class="cpp">std::apply([](auto ...x){std::make_tuple(some_function(x)...);} , the_tuple);</code>

이러한 솔루션은 명시적인 루프나 인덱스 없이 템플릿 튜플 내의 각 요소에 대해 작업을 수행할 수 있는 유연하고 효율적인 방법을 제공합니다.

위 내용은 \"각 (N): do_something_to_vec()\"과 같은 작업을 효과적으로 수행하기 위해 벡터 템플릿 튜플 내의 각 요소에 함수를 적용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.