从std :: vector <bool>获取bool引用

Mic*_*ndr 2 c++ boolean stdvector

我知道这是一个坏习惯,但我想知道一些解决方法或破解这个问题.我有一个这样的课:

template <class T>
class A : std::vector<T> {
  T& operator()(int index) { // returns a _reference_ to an object
    return this->operator[](index);
  }
};
Run Code Online (Sandbox Code Playgroud)

可以做这样的事情:

A<int> a{1,2,3,4};
a(3) = 10;
Run Code Online (Sandbox Code Playgroud)

但是如果有人使用bool作为模板参数,它就会停止工作

A<bool> a{true, false, true};
std::cout << a(0) << std::endl; // not possible
if (a(1)) { /* something */ }   // not possible
Run Code Online (Sandbox Code Playgroud)

std::vector<bool>是矢量的专用版本(http://www.cplusplus.com/reference/vector/vector-bool/),它不允许这样的事情.

有没有办法从std :: Vector获取布尔变量的引用?或者任何不同的解决方

Ded*_*tor 7

你点击了假容器专业化的诅咒.

这是标准仍然传播的公认设计错误,因此您需要专门化模板以避免标准专业化.

使用std::vector<mybool>struct mybool{bool value;};在您的专业或一些这样的(和现在骂不废除了它的快速和撤销其错误的顽固委员会).

或者,只需返回std::vector<T>::reference而不是T&.(如果可能的话,弃儿,不要传播那种疣)(不要忘记适当的咒骂)


Mik*_*our 5

有没有办法从std :: Vector获取布尔变量的引用?

没有.

或者任何不同的解决方

返回typename std::vector<T>::reference而不是T&.因为bool,它将返回向量的代理类型; 对于其他人,它将返回常规参考.

或者专门A<bool>使用其他东西vector<bool>.

或者使用其他类型(或许char,或简单的包装类bool)而不是bool.