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;}一起使用你的专业领域中的code>或类似的东西(并且诅咒顽固的委员会,因为他们没有很快地否定它,并且现在还没有纠正他们的错误)
或者,只需返回std::vector::reference
而不是T&
。(如果可能,请弃权,不要传播那个疣)(不要忘记适当的诅咒)它会产生编译错误吗?或者它可以编译,但无法工作?您可以为不使用std::vector
的a
提供专门化。