一致が検出されるたびにデータ構造体をベクターに挿入しようとしていましたが、コンパイルにも失敗しています。コードは次のとおりです。
#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 ソリューションを使用しないでください。ありがとうございました。