Boost総合スレ part10 (385レス)
Boost総合スレ part10 http://mevius.5ch.net/test/read.cgi/tech/1347611669/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
214: デフォルトの名無しさん [sage] 2014/10/26(日) 12:18:21.65 ID:/US9w/Z3 Boost spirit qiの、grammarに設定するinherited attributeについて どうしても分からない点があるので、質問します。 * ソースコードとエラーメッセージ全文 * http://pastebin.com/FaNQKEh1 コンパイラはVS2013 Pro Update3 の cl.exe (バージョン18.00.30723) boostのパッケージはバージョン1.55(7zip版)です。 inherited attributeとして自作の構造体を使用したいと思い qi::grammarのSignatureの引数部に自作の構造体を設定したところ 「その構造体にresultの定義がない」というエラーメッセージが起きコンパイルが失敗しました。 構造体の代わりにstd::string(resultというメンバは持っていないはず)を使用すると 問題なくコンパイルが通るので、inherited attributeに設定できる型に何か制約があるようにも思えるのですが boost.orgのドキュメントからはそれらしき記述が見つけられず、エラーメッセージを見ても私にはわかりませんでした。 海外含めて関連する情報がないか探したのですが(boost spirit qi inherited attribute requirement 等で検索) 解決策を見つけられませんでした。 inherited attributeに使用できる型の制約条件や、類似のコンパイルエラーとその対処方法をご存じであれば 教えていただきたく思います。 http://mevius.5ch.net/test/read.cgi/tech/1347611669/214
216: デフォルトの名無しさん [sage] 2014/10/27(月) 22:32:16.46 ID:DoYepSGR >>214 エラー以前になんかInherited attributesの使い方と使いどころを基本から間違っていないか? ここの例を見る限り ttp://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/tutorials/mini_xml___asts_.html 正規表現での後方参照みたいに一つのルール内でサブルールにマッチした結果によって 挙動を変えるルールを記述するときに使うものじゃないか? http://mevius.5ch.net/test/read.cgi/tech/1347611669/216
218: デフォルトの名無しさん [sage] 2014/10/30(木) 00:07:58.69 ID:lLBGJ4gC >>214,217 いまさらだがわかった範囲で言っておくと Inherited attributes に対する条件には ttp://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/reference/basics.html の > Some parsers (e.g. primitives and non-terminals) may take in additional attributes. Such parsers take the form: > p(a1, a2,..., aN) > where p is a parser. Each of the arguments (a1 ... aN) can either be an immediate value, or a function, f, with signature: > T f(Unused, Context) > where T, the function's return value, is compatible with the argument type expected and Context is the parser's Context type > (The first argument is unused to make the Context the second argument. This is done for uniformity with Semantic Actions). があって その immediate value の判定は boost::is_scalar か boost::spirit::traits::is_string のどちらかが真であるかで判定されてる。 けれど MyStruct はそのどちらにも該当しないので immediate value ではなくもちろん関数でもないから条件を満たさずエラーになる >>217でやったように phoenix の val, ref でラップすれば function, f のほうで条件を満たすことができるのでエラーにはならない ということだと思う http://mevius.5ch.net/test/read.cgi/tech/1347611669/218
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s