C ++ Range-V3, разделяющий аудиопоток на куски

Я читаю файл wav и в конце помещаю данные в массив std ::.
Мне нужно сделать некоторые операции с кусками данных. Поэтому я подумал, что это хорошая возможность изучить диапазоны Эрика Ниблера.

Я видел view_facade в страница справочника в разделе «Пользовательские диапазоны» но потом я увидел этот вопрос: ссылка на сайт . Теперь я не уверен, как создать класс с настраиваемым диапазоном. Кто-нибудь может мне помочь с этим? Код ниже показывает, чего я пытаюсь достичь.

#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. Но в этом случае я получаю кучу ошибок, которые я публикую в первую очередь. Я знаю из языка D, что так называемые «типы Волдеморта» важны, я не хочу отказываться от вычета типа возврата. Какой флаг в gcc я должен использовать?

2

Решение

Я все еще изучаю библиотеку диапазонов, но, насколько я понимаю, есть вещи, которые предоставляют 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)) {
...
}

Как я уже сказал, я все еще изучаю библиотеку, но, надеюсь, это поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]