Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyimpan Fungsi dengan Tandatangan Berbeza dalam Peta dalam C?

Bagaimana untuk Menyimpan Fungsi dengan Tandatangan Berbeza dalam Peta dalam C?

Mary-Kate Olsen
Lepaskan: 2024-11-14 15:54:02
asal
399 orang telah melayarinya

How to Store Functions with Different Signatures in a Map in C  ?

Menyimpan Fungsi dengan Tanda Tangan Berbeza dalam Peta

Dalam C , mencipta peta dengan kekunci rentetan dan fungsi generik kerana nilai menimbulkan cabaran. Walau bagaimanapun, dengan menggunakan gabungan pemadaman jenis dan operator templat(), ini boleh dicapai.

Pemadaman jenis membenarkan penyimpanan jenis fungsi yang berbeza dalam satu bekas, manakala operator templat() menyediakan akses kepada fungsi yang disimpan. Contoh kod di bawah menunjukkan pendekatan ini:

#include <any>
#include <functional>
#include <map>
#include <string>

template<typename Ret>
struct AnyCallable
{
    template<typename ... Args>
    Ret operator()(Args&amp;&amp; ... args) { ... }
    std::any m_any;
};

void foo(int x, int y) { ... }
void bar(std::string x, int y, int z) { ... }

int main()
{
    std::map<std::string, AnyCallable<void>> map;
    map["foo"] = &amp;foo;
    map["bar"] = &amp;bar;
    
    map["foo"](1, 2);
    map["bar"]("Hello", 1, 2);
}
Salin selepas log masuk

Dalam penyelesaian ini, kelas AnyCallable bertindak sebagai pembalut di sekeliling fungsi yang disimpan, menyediakan operator templat(). Penunjuk fungsi &foo dan &bar ditukar kepada objek std::function sebelum disimpan dalam m_any member. Apabila fungsi yang disimpan dipanggil, ia dihantar ke jenis fungsi yang sesuai dan dilaksanakan.

Adalah penting untuk ambil perhatian bahawa disebabkan pemadaman jenis, argumen yang sepadan mesti disediakan di tapak panggilan. Tambahan pula, ketegasan argumen fungsi adalah penting, kerana lebihan yang berbeza mungkin dibuat dengan bilangan argumen yang sama tetapi kelayakan yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Fungsi dengan Tandatangan Berbeza dalam Peta dalam C?. 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