2015-11-20 76 views
2

我正在读取wav文件,并最终将数据推入std ::数组中。 我需要对数据块进行一些操作。所以我认为这是学习Eric Niebler系列的好机会。C++ Range-V3将音频流划分为块

我看到了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语言知道所谓的“伏地魔类型”很重要,我不想放弃返回类型演绎。我应该使用哪个gcc标志?

回答

1

我仍然在学习自己的范围库,但我的理解是,暴露STL兼容的方法可以用作视图。因此,例如,与你的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)) { 
    ... 
} 

东西正如我说的,我还在学习图书馆本人,但希望这会有所帮助。

+0

不幸的是没有工作,从一个错误消息的一小块:错误:'constexpr const T&amp; ranges :: v3 :: basic_mixin :: get()const'不能超载 T const&get()const noexcept。 –

+0

特里斯坦的回答是正确的。我不明白你得到的答案。也许你可以发布你的整个代码。 –

+0

我编辑了我的问题。我将这个例子简化为一个文件。我希望现在它更容易理解。我复制了一部分编译输出。 –