C++ 从std::vector获取bool引用<;布尔>;

C++ 从std::vector获取bool引用<;布尔>;,c++,boolean,stdvector,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); } }; A<int> a{1,2,3,4}; a(3) = 10;

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

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类:std::vector{
T&operator()(int-index){//返回对象的_引用
返回此->运算符[](索引);
}
};
可以这样做:

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{1,2,3,4};
a(3)=10;
但如果有人使用bool作为模板参数,它将停止工作

A<bool> a{true, false, true};
std::cout << a(0) << std::endl; // not possible
if (a(1)) { /* something */ }   // not possible
A{true,false,true};
标准::cout
有没有办法从std::Vector中获取布尔变量的引用

没有

或者有什么不同的解决方案

返回
typename std::vector::reference
而不是
T&
。对于
bool
,它将返回向量的代理类型;对于其他人,它将返回一个常规引用

或者专门使用
A
而不是
vector


或者使用其他类型(可能是
char
,或者一个简单的类包装一个
bool
),而不是
bool
,,你就碰到了假容器专门化的诅咒

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

std::vector
struct mybool{bool value;}一起使用或类似的东西(并且诅咒顽固的委员会,因为他们没有很快地否定它,并且现在还没有纠正他们的错误)


或者,只需返回
std::vector::reference
而不是
T&
。(如果可能,请弃权,不要传播那个疣)(不要忘记适当的诅咒)

它会产生编译错误吗?或者它可以编译,但无法工作?您可以为不使用
std::vector
a
提供专门化。