![](/img/trans.png)
[英]How is std::vector<bool>::reference assigned to bool type in c++?
[英]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;
但是如果有人使用bool作為模板參數,它將停止工作
A<bool> a{true, false, true};
std::cout << a(0) << std::endl; // not possible
if (a(1)) { /* something */ } // not possible
std::vector<bool>
是std::vector<bool>
的專用版本( http://www.cplusplus.com/reference/vector/vector-bool/ ),不允許這樣做。
有沒有一種方法如何從std :: Vector獲取布爾變量的引用? 還是其他解決方案?
您遇到了假貨專業化的詛咒。
這是標准仍在傳播的公認的設計錯誤,因此您需要對模板進行專業化處理,以避免標准專業化。
使用帶有struct mybool{bool value;};
的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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.