我正在读取一个wav文件,最后将数据推送到std :: array中。 我需要对数据块进行一些操作。所以我认为这是学习Eric Niebler系列的好机会。
我在manual page under "custom ranges" section中看到了view_facade,但我看到了这个问题:link。现在我不确定如何制作自定义范围类。有人可以帮我吗?下面的代码显示了我想要实现的目标。
#include <iostream>
#include <range/v3/all.hpp>
using namespace ranges;
using namespace std;
struct A
{
static constexpr size_t MAX_SIZE = 100000;
A ()
{
for ( size_t i = 0; i < MAX_SIZE; i++)
data[i] = i;
size = MAX_SIZE;
}
auto begin() const { return data.begin(); }
auto end() const { return data.end(); }
std::array< double , MAX_SIZE > data;
size_t size;
};
int main()
{
A instance;
RANGES_FOR(auto chunk, view::all(instance) | view::chunk(256)) {
}
return 0;
}
编译输出的一部分:
14:47:23: Running steps for project tryOuts...
14:47:23: Configuration unchanged, skipping qmake step.
14:47:23: Starting: "C:\Qt\Tools\mingw491_32\bin\mingw32-make.exe"
C:/Qt/Tools/mingw491_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/Users/Erdem/Documents/build-tryOuts-Desktop_Qt_5_4_2_MinGW_32bit-Debug'
g++ -c -pipe -fno-keep-inline-dllexport -std=gnu++1y -pthread -lpthread -O3 -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -I"..\tryOuts" -I"." -I"..\..\..\..\range-v3-master\include" -I"D:\cvOutNoIPP\install\include" -I"..\..\..\..\Qt\5.4\mingw491_32\mkspecs\win32-g++" -o debug\main.o ..\tryOuts\main.cpp
In file included from ..\..\..\..\range-v3-master\include/range/v3/utility/iterator.hpp:28:0,
from ..\..\..\..\range-v3-master\include/range/v3/begin_end.hpp:24,
from ..\..\..\..\range-v3-master\include/range/v3/core.hpp:17,
from ..\..\..\..\range-v3-master\include/range/v3/all.hpp:17,
from ..\tryOuts\main.cpp:2:
..\..\..\..\range-v3-master\include/range/v3/utility/basic_iterator.hpp:445:22: error: 'constexpr const T& ranges::v3::basic_mixin<Cur>::get() const' cannot be overloaded
T const &get() const noexcept
^
------------更新---------------------------------- ---------
如果我添加 CONFIG + = c ++ 14代码几乎编译,除了以下自动返回类型扣除错误:
main.cpp:22:推断的返回类型仅适用于-std = c ++ 1y或-std = gnu ++ 1y
为了避免这些错误我正在使用CONFIG + = c ++ 1y.But在这种情况下,我收到了一堆我首先发布的错误。我从D语言中得知所谓的“伏地魔类型”#34;很重要,我不想放弃退货类型扣除。我应该使用gcc中的哪个标志?
答案 0 :(得分:1)
我自己仍然在学习范围库,但我的理解是,暴露STL兼容的begin()
和end()
方法的东西可以用作视图。例如,您可以使用Reader
课程
struct Reader {
// ...
auto begin() const { return rawData.begin(); }
auto end() const { return rawData.end(); }
};
然后,您可以使用view::all()
创建围绕Reader
的视图,例如
Reader r;
RANGES_FOR(auto chunk, view::all(r) | view::chunk(256)) {
...
}
正如我所说,我自己仍在学习图书馆,但希望这会有所帮助。