由于 C 11std::valarray有迭代器,通過std::begin()和std::end()介面提供。但是這些迭代器的型別是什么(以便我可以正確宣告它們)?
以下內容無法編譯并出現no template named 'iterator' in 'valarray<_Tp>'錯誤:
template <typename T>
class A {
private:
std::valarray<T> ar;
std::valarray<T>::iterator iter;
public:
A() : ar{}, iter{std::begin(ar)} {}
};
decltype顯示迭代器的型別是指向“valarray”元素的指標。確實,以下內容確實可以編譯并且似乎可以正常作業:
template <typename T>
class A {
private:
std::valarray<T> ar;
T* iter;
public:
A() : ar{}, iter{std::begin(ar)} {}
};
我錯過了什么?類中的宣告沒有合適的迭代器型別嗎?
uj5u.com熱心網友回復:
但是那些迭代器的型別是什么
型別未指定。
(以便我可以正確宣告它們)?
您可以使用 decltype:
using It = decltype(std::begin(ar));
It iter;
或者,在可能的情況下(不是成員變數),您應該更喜歡型別推導:
auto iter = std::begin(ar);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/435293.html
上一篇:如何使用嵌套命名空間來避免歧義?
