从 std::vector <bool>获取布尔值引用
Getting a bool reference from std::vector<bool>
我知道这是一个坏习惯,但我想知道这个问题的一些解决方法或技巧。我有这样的课程:
template <class T>
class A : std::vector<T> {
T& operator()(int index) { // returns a _reference_ to an object
return this->operator[](index);
}
};
可以做这样的事情:
A<int> a{1,2,3,4};
a(3) = 10;
但是如果有人使用布尔值作为模板参数,它会停止工作
A<bool> a{true, false, true};
std::cout << a(0) << std::endl; // not possible
if (a(1)) { /* something */ } // not possible
std::vector<bool>
是矢量(http://www.cplusplus.com/reference/vector/vector-bool/(的专用版本,不允许这样的事情。
有没有办法从 std::Vector 获取布尔变量的引用?还是任何不同的解决方案?
有没有办法从 std::Vector 获取布尔变量的引用?
不。
还是任何不同的解决方案?
返回typename std::vector<T>::reference
而不是T&
。对于bool
,它将返回向量的代理类型;对于其他人,它将返回常规引用。
或者专门A<bool>
使用vector<bool>
以外的其他东西。
或者使用其他类型(可能是char
,或者包装bool
的简单类(代替bool
。
你遇到了假容器专业化的诅咒。
这是一个公认的设计错误,标准仍在传播,因此您需要专门化模板以避免标准专用化。
在你的专业中使用带有struct mybool{bool value;};
或类似内容的std::vector<mybool>
(并诅咒顽固的委员会没有快速弃用它并消除他们的错误(。
或者,只需返回std::vector<T>::reference
而不是T&
。(如果可能的话弃权,不要传播那个疣((不要忘记正确的诅咒(
相关文章:
- 从python中调用C++函数并获取返回值
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 比较它们之间的元素并获取公共值的键
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- RCPP:将布尔值传递在列表中从R到C 函数的错误,该函数获取RCPP ::列表
- CRITICAL_SECTION用于设置和获取单个布尔值
- 从 std::vector <bool>获取布尔值引用
- 从enable_if中依赖类的true_type/false_type typedef中获取布尔值