首頁 > 後端開發 > C++ > 如何使用元編程將函數應用於向量元組中的每個元素?

如何使用元編程將函數應用於向量元組中的每個元素?

Barbara Streisand
發布: 2024-10-30 11:10:02
原創
943 人瀏覽過

How to Apply a Function to Each Element in a Tuple of Vectors Using Metaprogramming?

模板元組:在每個元素上呼叫函數

您的目標是在模板元組std:: 的每個元素上呼叫函數元組<:vector>...>。在 TupleOfVectors 結構中,您尋求實作 do_something_to_each_vec 方法,該方法會迭代每個成員向量並對其執行特定函數。

解決方案

採用一些元 -程式設計技術可以優雅地解決這個挑戰。使用生成編譯時序列和伴隨函數模板的元函數gen_seq,您可以實現以下機制:

1

2

3

4

5

6

7

8

9

10

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

登入後複製

1

2

3

4

5

6

7

8

9

10

11

12

13

<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,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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

登入後複製

就您而言,您可以如下使用它:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板