2

私は wav ファイルを読んでいて、最後に std::array にデータをプッシュしています。データのチャンクに対して何らかの操作を行う必要があります。ですから、これはエリック・ニーブラーの音域を学ぶ良い機会だと思いました。

「カスタム範囲」セクションの下のマニュアルページで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 を使用しています。しかし、この場合、最初に投稿した一連のエラーが発生しています。私は D 言語から、いわゆる「ヴォルデモート型」が重要であることを知っています。戻り型の推定をあきらめたくありません。gcc でどのフラグを使用すればよいですか?

4

1 に答える 1

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)) {
    ...
}

私が言うように、私はまだライブラリを自分で学んでいますが、これが役立つことを願っています.

于 2015-11-20T03:31:58.413 に答える