3

一致が検出されるたびにデータ構造体をベクターに挿入しようとしていましたが、コンパイルにも失敗しています。コードは次のとおりです。

#include <string>
#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_actions.hpp>

using namespace boost::xpressive;

struct Data
{
    int integer;
    double real;
    std::string str;

    Data(const int _integer, const double _real, const std::string& _str) : integer(_integer), real(_real), str(_str) { }
};

int main()
{
    std::vector<Data> container;

    std::string input = "Int: 0 - Real: 18.8 - Str: ABC-1005\nInt: 0 - Real: 21.3 - Str: BCD-1006\n";

    sregex parser = ("Int: " >> (s1 = _d) >> " - Real: " >> (s2 = (repeat<1,2>(_d) >> '.' >> _d)) >> " - Str: " >> (s3 = +set[alnum | '-']) >> _n)
                    [::ref(container)->*push_back(Data(as<int>(s1), as<double>(s2), s3))];

    sregex_iterator cur(input.begin(), input.end(), parser);
    sregex_iterator end;

    for(; cur != end; ++cur)
        smatch const &what = *cur;

    return 0;
}

内部でデータオブジェクトを使用しているため、「push_back」セマンティックアクションのコンパイルに失敗していますが、それを怠惰に使用することはできません (私にはわかりません)。

お願いします、誰かこれで私を助けてくれませんか?

注 - 残念ながら、私は MS VS 2010 (c++11 に完全に準拠していない) に縛られているため、可変個引数テンプレートと emplace_back ソリューションを使用しないでください。ありがとうございました。

4

1 に答える 1