Rumah >pembangunan bahagian belakang >C++ >Mengapa `std::vector::reference` Tidak Mengembalikan Rujukan `bool`?
Mengapa 'vector
Pertimbangkan contoh berikut:
#include <vector> struct A { void foo() {} }; template<typename T> void callIfToggled(bool v1, bool &v2, T &t) { if (v1 != v2) { v2 = v1; t.foo(); } } int main() { std::vector<bool> v = {false, true, false}; const bool f = false; A a; callIfToggled(f, v[0], a); callIfToggled(f, v[1], a); callIfToggled(f, v[2], a); }
Kod ini gagal disusun dengan yang berikut ralat:
dk2.cpp:29:28: error: no matching function for call to 'callIfToggled(const bool&, std::vector<bool>::reference, A&)'
Isu timbul kerana 'std::vector
Pengkhususan Vektor untuk 'bool'
Dalam kes 'std::vector
'fixed_vector' dan 'Boost Containers'
Untuk mengurangkan isu ini, anda boleh menggunakan yang berikut strategi:
Contoh Menggunakan 'fixed_vector':
template<typename t, typename... p> using fixed_vector = std::vector<typename foo<t>::type, p...>; int main() { fixed_vector<bool> v = {false, true, false}; const bool f = false; A a; callIfToggled(f, v[0], a); callIfToggled(f, v[1], a); callIfToggled(f, v[2], a); }
Contoh Menggunakan 'Boost Containers':
#include <boost/container/vector.hpp> int main() { boost::container::vector<bool> v = {false, true, false}; const bool f = false; A a; callIfToggled(f, v[0], a); callIfToggled(f, v[1], a); callIfToggled(f, v[2], a); }
Atas ialah kandungan terperinci Mengapa `std::vector::reference` Tidak Mengembalikan Rujukan `bool`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!