Bagaimana untuk Menggunakan Fungsi pada Setiap Elemen dalam Tuple Vektor Menggunakan Metaprogramming?

Barbara Streisand
Lepaskan: 2024-10-30 11:10:02
asal
778 orang telah melayarinya

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

Tuple Templat: Memanggil Fungsi pada Setiap Elemen

Matlamat anda adalah untuk menggunakan fungsi pada setiap elemen tuple templat std:: tuple...>. Dalam struct TupleOfVectors, anda berusaha untuk melaksanakan kaedah do_something_to_each_vec, yang berulang melalui setiap vektor ahli dan melaksanakan fungsi tertentu pada mereka.

Penyelesaian

Menggunakan beberapa meta- teknik pengaturcaraan boleh menangani cabaran ini dengan elegan. Dengan gen_seq fungsi meta yang menghasilkan jujukan masa kompilasi dan templat fungsi pengiring, anda boleh melaksanakan jentera berikut:

<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>
Salin selepas log masuk
<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>
Salin selepas log masuk

Anda boleh memanfaatkan untuk_each_in_tuple seperti yang digambarkan di bawah:

<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>
Salin selepas log masuk

Dalam kes anda, anda boleh menggunakannya seperti berikut:

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Fungsi pada Setiap Elemen dalam Tuple Vektor Menggunakan Metaprogramming?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!