为什么 '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中文网其他相关文章!