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获取布尔变量的引用?或者任何不同的解决方
你点击了假容器专业化的诅咒.
这是标准仍然传播的公认设计错误,因此您需要专门化模板以避免标准专业化.
使用std::vector<mybool>与struct mybool{bool value;};在您的专业或一些这样的(和现在骂不废除了它的快速和撤销其错误的顽固委员会).
或者,只需返回std::vector<T>::reference而不是T&.(如果可能的话,弃儿,不要传播那种疣)(不要忘记适当的咒骂)
有没有办法从std :: Vector获取布尔变量的引用?
没有.
或者任何不同的解决方
返回typename std::vector<T>::reference而不是T&.因为bool,它将返回向量的代理类型; 对于其他人,它将返回常规参考.
或者专门A<bool>使用其他东西vector<bool>.
或者使用其他类型(或许char,或简单的包装类bool)而不是bool.
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |