Apakah ada cara saya bisa membuat fungsi yang mengambil wadah dengan tipe tertentu (katakanlah std::string
) sebagai parameter
void foo(const std::container<std::string> &cont)
{
for(std::string val: cont) {
std::cout << val << std::endl;
}
}
dan menyebutnya untuk setiap jenis wadah stl sebagai input? seperti diatas?
std::set<std::string> strset;
std::vector<std::string> strvec;
std::list<std::string> strlist;
foo(strset);
foo(strvec);
foo(strlist);
c++
templates
stl
containers
chatzich
sumber
sumber
Jawaban:
Anda bisa membuat
foo
templat fungsi dengan mengambil parameter templat templat untuk tipe kontainer.misalnya
HIDUP
sumber
std::string
, jadi ..Tergantung pada apakah Anda ingin kelebihan beban
foo
untuk kasus lain atau tidakAnda dapat menggunakan tes yang berbeda untuk
std::is_same
, sepertistd::is_convertible
mengizinkansumber
Anda mungkin ingin mempertimbangkan untuk menggunakan iterator. Hasil antara mungkin terlihat seperti
Sekarang menggunakan templat yang dapat dipanggil:
Kami baru belajar menggunakan apa yang sudah ditawarkan STL.
sumber
Menambahkan ke jawaban @ songyuanyao, saya pikir kita dapat menggeneralisasikannya lebih lanjut ke:
sumber