簡體   English   中英

為什么 std::valarray 沒有 std::data() 重載?

[英]Why is there no std::data() overload for std::valarray?

C++11 引入了std::begin(std::valarray&)以及std::end(std::valarray&)

C++17 引入了std::data() ,它與std::vectorstd::array ,C風格 arrays 等一起使用。但是為什么沒有為std::valarray引入重載的std::data()

std::valarray被指定為具有連續存儲,可以通過獲取a[0]的地址來訪問(請參閱 注釋)。

std::data(std::valarray& a)可以簡單地定義為返回&(a[0]) 為什么沒有做到這一點? 是疏忽嗎?

我的動機是我正在開發一個通用的序列化庫。 When it receives contiguous binary number arrays from a source (such as CBOR), it detects if the destination container has an overloaded data(container) function, a container.resize(n) member function, as well as an appropriate value_type (matching primitive數字類型)。 這三者的存在使得將源數據直接高效地memcpy()到目標容器中成為可能。 如果有std::data(std::valarray&)重載,我的生活會更簡單。 缺少它並不是一個阻礙,但它確實使代碼更加混亂。


附錄:我想檢測data function 的原因是它告訴我目標容器是連續的。 如果它是連續的,那么我可以進行有效的字節復制(通過std::memcpystd::copy並不重要)。 如果它不是連續的,那么我必須根據容器類型使用push_backemplace等一次將每個未對齊的源數組第一個解包並將 append 解壓縮到目標容器。


附錄 2 :我決定使用適配器和特征方法,而不是檢測data function 的存在。 這將使支持非標准或用戶定義的容器類型變得更加容易。 我關於為什么沒有std::data(std::valarray& a)問題仍然存在。


附錄 3 :我應該澄清一下,我需要為 CBOR 類型的 arrays 做這個駭客,它只能是數字。 此外,源緩沖區中的數字未與元素邊界對齊。 我知道二進制數據可能需要字節序交換,如果不小心處理,將字節復制到浮點類型可能會觸發奇怪的 NaN 行為。

我現在后悔提到我的動機,應該讓std::data(std::valarray& a)問題獨立存在。 這個問題已經變成了什么樣的火車殘骸,哈哈。 :-)

正如評論中所述的 1201ProgramAlarm , 添加std::data的提議沒有提及std::valarray 除非有人能指出為什么&(a[0])不能用於獲取valarray的數據指針,否則簡單的答案是valarray在提案中被遺忘或忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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