簡體   English   中英

從std :: vector獲取布爾參考<bool>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM