為什麼 'vector
考慮以下範例:
#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); }
此程式碼無法透過以下方式編譯錯誤:
dk2.cpp:29:28: error: no matching function for call to 'callIfToggled(const bool&, std::vector<bool>::reference, A&)'
出現此問題是因為'std::vector
'bool' 的向量專用化
在'std::vector
'fixed_vector' 和'Boost Containers'
要緩解此問題,您可以使用以下命令策略:
使用「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); }
使用「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); }
以上是為什麼 `std::vector::reference` 不回傳 `bool` 引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!