为什么 vector::reference 不返回对 Bool 的引用?
在 C 中,std::vector ;容器专门用于布尔值。与其他数据类型的向量相比,这种专门化引入了行为差异。
问题
在提供的示例中,函数 callIfToggled 用于切换 bool 值和调用结构体上的方法。当尝试传递对 std::vector 元素的引用时调用IfToggled,会发生编译错误。这是因为 vector::reference 返回的引用类型不是预期的 bool&。
原因
在 bool 向量特化中,vector解决方案
- 使用向量相反: 将 bool 向量替换为向量;解决专业化问题。
- 使用 Boost Containers 库: Boost Containers 库提供了向量的非专业化版本。它提供了对 bool 值的真实引用。
- 将 Bool 值包装在结构中:围绕 bool 创建一个名为 MyBool 的包装器结构。这允许传递对包装器的引用,而包装器又提供对底层布尔值的间接访问。
示例(Char 向量):
#include
struct A
{
void foo() {}
};
template
void callIfToggled(char v1, char &v2, T &t)
{
if (v1 != v2)
{
v2 = v1;
t.foo();
}
}
int main()
{
std::vector v = { false, true, false };
const char f = false;
A a;
callIfToggled(f, v[0], a);
callIfToggled(f, v[1], a);
callIfToggled(f, v[2], a);
}
以上是为什么 `std::vector::reference` 不返回 `bool&`?的详细内容。更多信息请关注PHP中文网其他相关文章!