Boost総合スレ part9at TECH
Boost総合スレ part9 - 暇つぶし2ch481:デフォルトの名無しさん
11/05/14 01:41:27.26
こんにちわ。
質問していいですか?
>>24で書いてあるような、
「この機能を使うためにはこのライブラリをリンクする必要があるよ。」
みたいな情報ってどこに書いてありますか?
公式のThreadのドキュメントみてもそれっぽいの無かったですよ。


482:デフォルトの名無しさん
11/05/14 16:10:21.87
俺は英文で見かけたよ。どこだか忘れたが。
dll名でググってみれば?

483:デフォルトの名無しさん
11/05/14 20:39:49.15
Boost1.46.1ちゃんのRegexをSTLPortでBuild(Linux)するとエラー吐いちゃうけどどうしたらいいの?


484:デフォルトの名無しさん
11/05/14 22:24:45.89
>>482
個人で運営なさっている解説サイトとか、メーリング
リスト等には書いてあるんですけど、もう少しオフィ
シャルな情報が欲しいじゃ無いですか。

そう考えて公式サイトを読んでいたんですけど、私の
拙い英語力と集中力じゃさっぱりでした。


485:デフォルトの名無しさん
11/05/14 22:41:30.83
Getting Started の Library Naming 書いてあるだろう

486:デフォルトの名無しさん
11/05/14 22:58:08.96
>>485
ありました!有り難うございます!「6.3 Library Naming」にありましたよ!!

Getting Startの最初のページの右下のNext:の部分を見逃してました。
命名規約からライブラリのファイル名を導き出してたんですね。

jamfaileのコメントとかを必死に翻訳していた自分が情けないです。
有難うございました。

487:デフォルトの名無しさん
11/05/15 09:11:00.23
Boost Graphに巡回セールスマン問題を解ける
アルゴリズムがあったら名前を教えて欲しい

488:デフォルトの名無しさん
11/05/15 09:44:19.53
>487
近似解で良ければ metric_tsp_approx

489:デフォルトの名無しさん
11/05/15 09:45:08.77
>>488
ありがと!

490:デフォルトの名無しさん
11/05/20 06:15:31.08
>>480
〉継承はOOPの本質じゃないんじゃないかな?

:(;゙゚'ω゚'):マジで……?

491:デフォルトの名無しさん
11/05/20 10:54:00.91
URLリンク(ja.wikipedia.org)オブジェクト指向#オブジェクト指向プログラミングの構成要件
情報隠蔽 - これは古典的な可視性の定義である。(?)

*旧来の多くのオブジェクト指向言語が備えている性質
継承 - クラスベースのオブジェクト指向に固有の概念である。
多態性 - プロトタイプベースのオブジェクト指向の場合では関係がない概念とされる。
動的束縛 - これはオブジェクト指向の本質的な概念ではあるが、実行時性能に制約が生じる為、この特性を備えていないオブジェクト指向言語もある。

だと。

492:デフォルトの名無しさん
11/05/20 12:02:46.37
で、C++でクラスベースなBoostだと何がどうだと?

493:デフォルトの名無しさん
11/05/20 12:12:29.26
>>490
480ではないが、継承がやってることといえば
polymorphismの実装
基底のコードの流用
だけだからな
これらがそれぞれ別の手段で実現できれば継承はなくてもいいと思う


と俺が思ってるだけで一般的には継承はOOPの重要な要素だけどね

494:デフォルトの名無しさん
11/05/20 13:39:21.05
データとアルゴリズムの論理的結合があればOOPと言える。
「動的な」結合が必要かどうかは言語によるのではないかと思う。

495:デフォルトの名無しさん
11/05/20 14:24:28.46
そうだよなー。

それぞれアトミックな概念かもよく分からずに、仮想関数は静的に型付けされた動的束縛だから、仮想関数や抽象(インターフェース)クラスはC++のOOPの本質のひとつじゃね?って感じで深みにハマって結局訳わかめになる。

496:デフォルトの名無しさん
11/05/20 15:36:30.29
Data + Algorithm = Programと言えばニクラウス・ヴィルトだが、要はオブジェクトとは
データとアルゴリズムのまとまった単位、即ち一つの完結した部分プログラムであって、
それの寄せ集めが全体としてのプログラムであるという観点および方法論のことを
オブジェクト指向と呼んでいるのだと思う。
それとは別にストラウストラップがカプセル化・継承・多態性をC++言語による
オブジェクト指向サポートの基本要素としたのは一つレイヤーの上がる話だ。

// ちょっとBoostとは関係ない話になったが

497:デフォルトの名無しさん
11/05/21 04:37:29.17
複数人で開発するようになると、
継承はコードが読みづらくなるから避けてほしい。

498:デフォルトの名無しさん
11/05/21 04:37:53.91
IF継承は別ね。


499:デフォルトの名無しさん
11/05/21 09:59:29.67
クラス構成が仕様で決まってないってことか
問題はむしろそっちだな

500:デフォルトの名無しさん
11/06/02 17:39:21.54
boostのtrunk面白いなぁ
bjamに--without-mpi付けてたのにmpiのライブラリできた

501:デフォルトの名無しさん
11/06/02 18:13:44.93
もしかして:Jamfileのバグ

502:デフォルトの名無しさん
11/06/03 21:52:25.68
shared_ptrつかいまくりのプログラムで問題が無いか調べるにはどうしたらいいですか?
プログラム終了時に例外とメモリリークでなければOK?

503:デフォルトの名無しさん
11/06/04 00:16:10.77
終了時に全部開放されてるか調べる。
終了順に依存関係があるものは設計で対応してあるか確認する。

こんなもんじゃね。楽するためのものだから、判ってて使ってるなら気にしなくていいとおもうが。
心配なら、全部resetしたらw

504:デフォルトの名無しさん
11/06/04 18:26:55.96
>>503
ありがとうございます

505:デフォルトの名無しさん
11/06/07 19:04:36.62
boost::shared_ptrのデリーターを一旦取り出して開放時の処理を追加してまた元に戻す、みたいな事したいんだけど出来ますか?

shared_ptr<Hoge> hoge;
HogeRegistry hogeReg;

hogeReg.insert(hoge.get()); // ライブラリの都合上生ポインタしか登録できない。ので、ここでhogeのデリーターに新たにhogeReg.erase(hoge.get())に相当する処理を追加したい



506:デフォルトの名無しさん
11/06/07 19:13:08.40
HogeRegistoryをラップするクラス作った方がいいんじゃないか?

507:デフォルトの名無しさん
11/06/07 20:19:29.36
そんなコンテナ捨てちまえ

508:デフォルトの名無しさん
11/06/07 22:20:38.76
っ template<class Y, class D> shared_ptr(Y * p, D d);
  Effects: Constructs a shared_ptr that owns the pointer p and the deleter d.


509:デフォルトの名無しさん
11/06/08 01:35:32.50
>>505
できた。
URLリンク(codepad.org)

けど、 >>507 のほうが正しい気がする。

510:デフォルトの名無しさん
11/06/08 10:06:56.11
>>509
なるほど、別のスマポを作ってしまうというのは盲点でした


511:デフォルトの名無しさん
11/06/08 10:20:29.14
盲点て
shared_ptr捨てるとかないわ

512:デフォルトの名無しさん
11/06/08 21:33:22.84
シェアポ

513:デフォルトの名無しさん
11/06/09 11:06:07.76
vector<any> の中身を順番にostreamに突っ込みたいんですが,
組み込み型ならある程度typeごとに条件わけで書けるのはわかるんですが,
ユーザー定義型の場合はどうやって動的にany_castしたら良いんでしょう??
placeholderのtype()に合うように自動的にcastってできるんでしょうか.
初心者ですいませんorz

514:デフォルトの名無しさん
11/06/09 19:35:19.60
>>513
作ったクラスに<<をオーバーロードすればいいじゃない

515:デフォルトの名無しさん
11/06/09 20:13:21.12
>>514
初級者なのでよくわかっていないのですが,
class A; vector<any> b; b.push_back( A() );
みたいにしたあと,any_cast<A>を正しくするにはどうしたらいいのか…
せめてfor_each( any &a in b ) cout << any_cast< a.type() >(a);
みたいな事ができるといいのですが…


516:513
11/06/09 22:21:11.39
動的にany_castする方法はわからなかったですが,
やりたいこと自体は基底にオペレータを定義して,
あとは多態性で解決できました.
できてみれば簡単でした…なんで思いつかなかったんだろう...
ありがとうございました.


517:デフォルトの名無しさん
11/06/09 23:19:22.71
>513
静的な解決はできないから動的なマルチディスパッチしかない。

多態で済むんだったら、普通に基底ポインタで保持したら?

518:513
11/06/10 11:36:36.57
>> 517
静的にはムリなんですね.そりゃそうか...
それで行きます!


519:デフォルトの名無しさん
11/06/14 00:01:56.65
property_treeのiniファイルパーサーですけど、セクションとキーの文字列を
大文字小文字の区別をつけないようにできないんでしょうか?
APIのGetPrivateProfileString()は、大文字小文字の区別が無かったので
すでにあるINIファイルをこれで読み込もうとすると、大文字だったり小文字
だったりするので、設定が見つからなかったりするんです。



520:デフォルトの名無しさん
11/06/14 08:27:27.95
>>519
basic_ptree の第 3 テンプレートパラメータで大文字小文字無視する比較を渡せばいいんじゃないかな。

521:デフォルトの名無しさん
11/06/14 08:36:03.92
同じことだけど ptree → iptree (wptree → wiptree)

522:デフォルトの名無しさん
11/06/14 09:04:35.81
property_treeもう手放せないんだけど、-O3でバイナリが
数100k膨れ上がるのは何とかならんのか

523:デフォルトの名無しさん
11/06/14 21:45:32.04
>>521
やってみます!ありがとうございます。

524:uy
11/06/21 07:11:35.99
素晴らしい言語だな・・・・・


525:uy
11/06/21 07:41:23.38
【ノード】uyプログ... Part4.0【更なる未来】
スレリンク(prog板)

ゴミが積もって四スレ目

526:uy
11/06/21 15:51:38.99
ゴミみたいなスレだな・・・・

527:デフォルトの名無しさん
11/06/29 17:25:25.50
1.47期待hosyu

528:デフォルトの名無しさん
11/06/30 00:32:47.62
geometry楽しみ

529:デフォルトの名無しさん
11/06/30 06:53:43.21
>>528
なんも動きがないんだが大丈夫なのかアレ

530:デフォルトの名無しさん
11/07/02 23:23:39.21
新機能をブリーフィングして俺をワクワクさせろ

531:デフォルトの名無しさん
11/07/02 23:26:20.96
もうちょっとコンパイル早くしてくれませんか?

532:デフォルトの名無しさん
11/07/03 01:27:40.58
TMP使うソースのコンパイルは
指示する度にうんこしてこれる

533:デフォルトの名無しさん
11/07/03 07:55:11.52
Boost.CompilationFirewall

534:デフォルトの名無しさん
11/07/03 12:31:34.50
マルチコアCPU使ってる場合はコンパイラオプションに/MP付ければ多少速くなるよ


535:デフォルトの名無しさん
11/07/05 08:18:42.24
boostにマルチスレッド対応コンテナってある?


536:デフォルトの名無しさん
11/07/05 21:13:20.99
lockfreeコンテナのことなら今レビュー中だったかな?

537:デフォルトの名無しさん
11/07/12 17:23:37.47
Version 1.47.0
URLリンク(www.boost.org)


538:デフォルトの名無しさん
11/07/13 22:55:11.55
<boost/archive/binary_iarchive.hpp>を使用すると警告が出てくるのですがこれはどうにもならないのでしょうか
インクルードしているだけで出てくるのでコードが悪いわけではなさそうですが・・・

539:デフォルトの名無しさん
11/07/13 22:56:18.32
警告なら非表示にすればいいだろ

540:デフォルトの名無しさん
11/07/13 23:00:22.26
んー、そうなんですけど利用したらなんかバグとか出そうで心配なのですが・・・
データが失われる可能性とか出てるので

541:デフォルトの名無しさん
11/07/13 23:07:01.70
そんな餌に俺はつられんぞ

542:デフォルトの名無しさん
11/07/13 23:57:17.82
いやいや、まじめに

543:デフォルトの名無しさん
11/07/14 01:29:57.03
とりあえず、どんな警告が出てくるか位ははろうぜ

544:デフォルトの名無しさん
11/07/14 01:36:18.29
そうですね。申し訳ない
長かったのでこちらに
URLリンク(codepad.org)


545:デフォルトの名無しさん
11/07/14 01:38:01.28
>>544
std::streamsizeってstd::size_tのtypedefだったと思うけどどうしてそれに対する警告が出てるの?

546:デフォルトの名無しさん
11/07/14 01:45:06.68
さぁ・・・自分ではなんとも
boostの中を見てもさっぱり

547:デフォルトの名無しさん
11/07/14 03:24:52.14
>>538,544
streamsize は size_t 以下の精度とは限らないからね。

URLリンク(svn.boost.org)
報告されてはいないみたいだから、 1.47 で試してまだ出るようなら Trac へ Go

548:デフォルトの名無しさん
11/07/14 14:08:54.03
どうやら1.47でも出るみたいですね
・・・しかし英語ができなくて報告の仕方がわからない

549:デフォルトの名無しさん
11/07/14 16:41:24.32
う~BOOST_FOREACHって意外と遅かったのねぇ、便利だから使い過ぎてしまったよ
書き直しorz

550:デフォルトの名無しさん
11/07/14 16:48:14.75
問題になるほど遅い印象はないけどな

551:デフォルトの名無しさん
11/07/14 19:51:12.74
>>594
何年も前の話だけど、BOOST_FOREACH のコンパイルされたアセンブラコードを見て、
あまりのひどいコードに愕然としたことがあったよ。

以来使っていない。

552:デフォルトの名無しさん
11/07/15 00:27:44.82
foreachならopenmpやtbbにもあったと思うのでそっち使ってみてはどう?

553:デフォルトの名無しさん
11/07/15 19:42:28.31
そんなんあったっけ?
見当たらぬ・・・

554:デフォルトの名無しさん
11/07/15 21:51:05.85
URLリンク(eetimes.jp)
URLリンク(parallel-for.sourceforge.net)

公式ドキュメントは日本語検索だと出づらいが、サンプルコードは出てくるぞ

555:デフォルトの名無しさん
11/07/17 22:00:44.81
xpressive_static.hppをプリコンパイルに入れただけでpchが40MB以上膨らんだでござる

556:デフォルトの名無しさん
11/07/17 22:03:18.06
boostの中の人って頭いいのにアホなのかな
あの技術と熱意を新低級言語開発に回してたらいまごろとっくにもっと便利なもんできてただろ


557:デフォルトの名無しさん
11/07/17 22:25:23.28
D言語の二の舞になるだけだろ

558:デフォルトの名無しさん
11/07/17 22:32:27.26
言語の核の部分は人数多くてもしょうがない。
重要なのは汎用性と一貫性で、技術と熱意は邪魔なだけ。

低級言語ならForth最強だろ。

559:デフォルトの名無しさん
11/07/17 22:57:03.18
ジェネリックな低級llvm言語、その名はclay

560:デフォルトの名無しさん
11/07/20 21:39:22.18
property_treeのini_parserなんですが、XP以降だと問題ないのですが
Win2kだと正しくiniファイルが読み込めないのですが、対応してないって
ことでしょうか?


561:デフォルトの名無しさん
11/07/20 21:57:19.39
どんなふうにできないのか?

562:デフォルトの名無しさん
11/07/20 22:01:58.89
Boost::pythonの質問はココで良いですか?

563:デフォルトの名無しさん
11/07/20 22:18:35.25
>>561
Win2kのPCにVSが入ってないんで、まだ詳しく見れてません。
ただ、現象的には、

・セクションが見つからない
・キーが見つからない
・イコール(=)の後に文字列がない

のいずれかですね。
この場合は、デフォルト文字列になるようにしてるんですが、
読み出そうとしている文字列がすべてデフォルトになっちゃってるんで。

564:デフォルトの名無しさん
11/07/22 22:07:40.02
>>560
自己レスです。

Win2kの問題では無く、ファイルのパス名に日本語を含んでいるためでした。
read_iniで直接ファイル名を指定せずに、ifstreamで開いてからそのストリームを
read_iniに指定することにしました。

565:デフォルトの名無しさん
11/07/23 02:01:43.28
>>556
boostより便利なものってなんだよw

566:デフォルトの名無しさん
11/07/23 04:24:22.55
いい加減boost.GUIを作れよ

567:デフォルトの名無しさん
11/07/23 07:01:26.61
>>565
python最強

568:デフォルトの名無しさん
11/07/24 01:16:39.11
>>566
やってみろ
そして、どこが「boost」なのか説明してくれ

569:デフォルトの名無しさん
11/07/25 01:20:20.78
>>567
そのうちC++でboost使うほうが楽になるよ。

570:デフォルトの名無しさん
11/07/25 14:35:01.36
GUIはどうすんの

571:デフォルトの名無しさん
11/07/25 17:51:44.10
wxWidgets

572:デフォルトの名無しさん
11/07/25 18:41:46.88
wxWidgets って Boost 版あったっけ

573:デフォルトの名無しさん
11/07/25 18:51:49.10
っていうかwxWidgets使ってるとBoostいらねって思うわw

574:デフォルトの名無しさん
11/07/27 15:45:22.63
c++0xのlambdaと同じ様なものは
boost組み合わせてできないものでしょうか

_1

じゃなくて

x

とか変数に使いたい

575:デフォルトの名無しさん
11/07/27 19:05:09.41
shared_ptrってマクロでマルチスレッドをONOFFできるけど
ONのshared_ptrとOFFのshared_ptrを共存させるのってアリなの?


576:デフォルトの名無しさん
11/07/27 20:54:57.72
>>575
ない

577:デフォルトの名無しさん
11/07/27 22:02:54.24
>>574
_1 の別名として使えればいいだけなら
boost::lambda::placeholder1_type X;
とすれば X が _1 と同じように使える。
Boost Phoenix で似たようなことしつつ let 使った方がもう少し望みに近くなるかもしれない。

578:デフォルトの名無しさん
11/08/11 19:09:09.86
BOOST_CHRONO_HEADER_ONLY マクロ有効にしても.libリンクしろって怒られます
date_timeとかは普通にヘッダオンリで使えてるんですけど、Chronoの場合なんか他に必要なんですか?

579:デフォルトの名無しさん
11/08/11 19:31:03.92
自己解決しました
BOOST_SYSTEM_NO_LIB と BOOST_ERROR_CODE_HEADER_ONLY も有効にしたらできました・・・
もっと調べてから聞くべきだった

580:デフォルトの名無しさん
11/08/18 11:43:35.00
c++0x確定でboostもいろいろ影響うけるかな

581:デフォルトの名無しさん
11/08/24 11:13:47.94
URLリンク(gist.github.com)

spirit 試してみてます
上記のコードで helper って関数書かないで、
39 行目みたいにしたいんだけど、うまく書く方法ありませんか?


582:デフォルトの名無しさん
11/08/26 14:22:00.42
復帰

583:デフォルトの名無しさん
11/08/29 16:25:44.13
matlabとか他の計算結果を全部ublasの形式に合わせて出力してるんだが
単純に数値並べただけの方が便利だったりするのかな

584:デフォルトの名無しさん
11/08/29 21:45:43.13
>>583
その計算結果の用途によるとしか……
ublasへの入力が多いならそれでいいんじゃね?

585:デフォルトの名無しさん
11/08/30 05:28:57.20
もっと背景を書いてくれないと答えようがないな

586:デフォルトの名無しさん
11/08/31 03:17:50.94
boostでシリアライズしてたんだけどエラーがどうしても消えなかったんだ
それでいろいろやってたら出なくなったんだがその内容が
friend class boost::serialization::access;
template<class Archive>
void serialize( Archive& ar, unsigned int ver )
{
ar & string型;
ar & string;
ar & int;
ar & int;
ar & int;
ar & int;
}
の並びを
ar & int;
ar & string型;
ar & int;
ar & string;
ar & int;
ar & int;
にしたらエラーが出なくなった。原因は何なんだろう

587:デフォルトの名無しさん
11/08/31 03:28:52.43
>>586
↓こっち行け
スレリンク(tech板)

588:デフォルトの名無しさん
11/08/31 09:40:03.66
>>586
エラーの内容も書かずに云々

589:デフォルトの名無しさん
11/09/01 21:32:00.35
boost::property_tree で要素の削除ってどうやってするんでしょうか?
たぶんeraseだとは思うんですがうまくいきません。

590:デフォルトの名無しさん
11/09/04 17:34:26.96
URLリンク(www.kmonos.net)
をみてasioでwebサイトからデータを取得しています
ip::tcp::iostream s( "www.boost.org", "http" );
によって作られたsはs << flush;を実行した時点で通信が開始されていると思いますが
while( getline(s, line) ) cout << line << endl;
によってデータを受信した後sを再利用するとこはできませんか?
質問するところが間違っていたらすいません


591:デフォルトの名無しさん
11/09/05 04:45:04.36
boost:threadに関する質問です
スレッドを作って内部で勝手に処理させるクラスを作っています
class test {
boost::thread thr;
void start(){
thr = boost::thread(func);
}
void stop();
}
のようにして生成したスレッドのコピーをメンバ変数に保存してい置くのはまずいでしょうか
一応boost::thread(func)がスコープを外れて破棄されても動作するようですがどうなのでしょうか

592:デフォルトの名無しさん
11/09/05 08:59:00.97
>>591
別にまずくはない。
boost::threadのデストラクタはdetach()を呼び出す。つまり、threadオブジェクトと
スレッドの寿命は同期していないし、スレッドが終わるまで待ってくれたりもしない。
同期させたければthreadオブジェクトを破棄する前にスレッド関数を抜けるように
フラグやcondition_variable等で指示しておき、(thread::join()等で)スレッドが終了した事を確認してから、
threadを破棄する必要がある。

593:デフォルトの名無しさん
11/09/05 14:55:53.84
>>589
自己レスです。

実際には、iniファイルの読み書きで使ってるんですが、
セクションごと消すのは出来るんですが、その中のあるキー設定を
消すと、write_ini()で例外が発生してしまいます。

だれかご存じないでしょうか?

594:デフォルトの名無しさん
11/09/05 15:06:36.43
>>593
さらに自己レス。

[Section]
Key1=1234
Key2=9876

と有ったときにKey2は消せるんですが、Key1を消すと、write_ini()パーサーで
例外が発生します。
これって、write_ini()のバグ?

595:デフォルトの名無しさん
11/09/05 20:03:55.89
>>594
またまた自己レスです。

どうも、erase()またはwrite_???()がバグっているように思える。
iniパーサーでなくて、xmlやjsonパーサーでもerase()してwriteすると
おかしくなる。erase()したあと、ptreeをたどるとeraseしなかった要素は
残っているようなので、write_???()がくさい。

596:デフォルトの名無しさん
11/09/05 20:07:12.19
コード書けや

597:デフォルトの名無しさん
11/09/05 20:11:17.10
>>595
やっぱerase()がおかしい。earse()したあと別のptreeにコピーすると
異常が出てしまう。(clone()ルーチンで)
erase()は使えないなぁ。
これ、ptreeってmulti_index_containerですよね。そっちもバグってるってことか?

598:デフォルトの名無しさん
11/09/05 20:16:43.56
>596

ptree pt;
read_ini("hoge.ini", pt);

ptree& n1 = pt.get_child("Section");
ptree::assoc_iterator it = n1.find("Key1");
if (it != n1.not_found()) {
write_ini("hoge.ini", pt);
}

<hoge.ini>
#=================
[Section]
Key1=1234
Key2=ABCDE
#=================


599:デフォルトの名無しさん
11/09/05 20:21:26.46
>>598
すまん。肝心のerase()が抜けてたorz

ptree pt;
read_ini("hoge.ini", pt);

ptree& n1 = pt.get_child("Section");
ptree::assoc_iterator it = n1.find("Key1");
if (it != n1.not_found()) {
pt.erase(n1.to_iterator(it));
write_ini("hoge.ini", pt);
}

<hoge.ini>
#=================
[Section]
Key1=1234
Key2=ABCDE
#=================

600:デフォルトの名無しさん
11/09/05 20:51:46.57
このコードでどうだろうか

ptree pt;
read_ini("hoge.ini", pt);
ptree::assoc_iterator it = pt.find("Section");
if (it != pt.not_found()) {
 it->second.erase("Key1");
 write_ini(std::cout, pt);
}

601:デフォルトの名無しさん
11/09/06 08:06:09.21
>>600
おお!うまくいきました!
ありがとうございました。

なるほど、最下層の要素を削除するときはこうしないといけないんですね。
boostにも削除のサンプルを入れて欲しいな~。

602:デフォルトの名無しさん
11/09/06 08:08:44.87
常識だから入れなかったんじゃない?

603:デフォルトの名無しさん
11/09/06 09:14:40.07
結局、キーの方も find()で探して、もしあれば、そのイテレータを使って

ptree::assoc_iterator it2 = it->second.find("Key1");
if (it2 != it->second.not_found()) {
 it->second.erase(it->second.to_iterator(it2));
}

として消すようにしました。
まあ、例外で受けていいのですが他の処理もあるので。


604:デフォルトの名無しさん
11/09/06 11:49:02.47
リンクエラーが出て先に進めないのでご存知の方がいたら教えて下さい。
環境 Visual C++ 2008
   boost Ver.1_46_0

C:\>cl /EHsc test.cpp
とコンパイルしたら
LINK : fatal error LNK1104: ファイル 'libboost_thread-vc90-mt-s-1_46.lib' を開くことができません。
と出力されました。
また、以下のサイトでlibboost_thread-vc90-mt-s-1_46.libらしきファイルをDLできたので、
\boost_1_46_0\stage\lib配下にコピーしましたが結果同じでした。
 URLリンク(hg.splayer.org)

ソースファイルは以下のようなファイルです。

#include <iostream>
#include <boost/thread.hpp>
using namespace std;
using namespace boost;
void func(){
}
void main(){
thread threadA(func);
threadA.join();
}

ご教授お願いします。 m(__)m


605:デフォルトの名無しさん
11/09/06 11:58:31.75
突っ込んだ所で追加のライブラリ ディレクトリに入ってなきゃダメだろ

606:デフォルトの名無しさん
11/09/06 12:51:54.38
URLリンク(www.kmonos.net)

607:604
11/09/06 14:27:03.46
>>605
>>606

ありがとうございます m(__)m

自動インストーラでboost_1_47を再インストールしたあと、
vsvars32.batに
@set LIB="C:\boost_1_47\lib";C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;%LIB%
も追加したらリンク通るようになりました。

608:デフォルトの名無しさん
11/09/08 04:08:47.89
URLリンク(www.kmonos.net)
ではgetlineによって1行づつしか読んでいませんが
char *buf = new char[size];
s.read(buf,size);
のようにして一気に読み込みたいのですがどうすればいいでしょうか


609:デフォルトの名無しさん
11/09/12 00:07:38.37
フェニックスがFC++の後継だそうだけど
いろんな意味で中途半端すぎないか
それともこれから発展していくのだろうか

610:デフォルトの名無しさん
11/09/12 01:17:16.20
arrayって宣言時以外に入力するには1つずつ入れないとダメ?
面倒くさいんだけど

611:デフォルトの名無しさん
11/09/12 01:45:29.28
assignとかなかったっけ

612:デフォルトの名無しさん
11/09/12 02:39:33.09
おぉ、arrayにも使えたのか

613:デフォルトの名無しさん
11/09/13 21:55:59.68
VS2005使ってるのですがboostが正しくインストールされてるか簡単に確かめる方法ないですか?


614:デフォルトの名無しさん
11/09/19 11:54:58.40
memoizationをtemplate使って汎用に書いた関数ってなかったでしょうか

615:デフォルトの名無しさん
11/09/19 13:57:11.65
pstadeのmemoizedぐらいしかしらん

616:デフォルトの名無しさん
11/09/20 10:42:28.53
URLリンク(p-stade.sourceforge.net)
これいいな
早く公式にとりこまれないかな

617:デフォルトの名無しさん
11/09/20 11:58:01.13
2chの過去ログみたら
eggが誰もレビューされないでレジェクトだって?

公式の説明はどうなってるの
今ならレビューするのに


618:デフォルトの名無しさん
11/09/20 12:32:36.15
>>617 URLリンク(ja.lmgtfy.com)

619:デフォルトの名無しさん
11/09/20 13:12:27.24
一度レビューに上ったこともあるんだぜ。
あまりにもレビュー数が少なかったので、落とされたが。

620:デフォルトの名無しさん
11/09/20 13:38:38.71
なんでドキュメント改良して再チャレンジって話にならなかったの?

621:デフォルトの名無しさん
11/09/20 15:00:38.77
本人が長いこと更新してないみたいだし
誰かが本人と連盟扱いでドキュメント更新したものを再チャレンジしたらダメなのかな?

622:デフォルトの名無しさん
11/09/29 16:11:38.71
VS2008ではワーニングが出なかったんだが、VS2010にすると

C4503 装飾された名前の長さが限界を超えました

っていっぱい出るんだが、どうすればワーニングが出ないようにできるんでしょうか?
コンパイルそのものは、正常終了してます。


623:デフォルトの名無しさん
11/09/29 18:19:11.04
boost-coroutineはx84-64で動かないって本当ですか?
2010年にバージョンアップしたみたいですが
x84-64で動かないってコメントみかけるのが2009年より前のものばかりなので
ひょっとして改善したのかと

624:デフォルトの名無しさん
11/09/29 19:46:32.94
試してみてくれ
俺も気になる

625:デフォルトの名無しさん
11/09/30 00:13:17.37
そんな事より大変だよおまえら
progress_displayさんがdeprecatedされるって

626:デフォルトの名無しさん
11/09/30 00:52:26.07
奇跡のような存在だったからな。

627:デフォルトの名無しさん
11/09/30 07:13:20.60
progress_displayさんはboostの癒しキャラ
技巧凝らしたソースばかり見ていたら疲れるだ

628:progress_display
11/09/30 21:19:30.73
みんな反対してよ(´;ω;`)

629:デフォルトの名無しさん
11/09/30 21:26:13.06
progress_displayに
呼び出し元プロセスとの進捗状況をやりとりする機能を実装し
そのプロトコルも規格化したりすると延命できるのかな。

630:デフォルトの名無しさん
11/09/30 21:34:09.65
progress_displayやprogress_timerの実装に使われてる大元のBoost.Timerの刷新のついでだからどうしようもないな

631:progress_display
11/09/30 21:57:09.32
何でみんなそんなに冷静なのっ!?

632:デフォルトの名無しさん
11/10/01 08:36:25.31
来るべき時が来たって感じだから…

633:デフォルトの名無しさん
11/10/01 10:52:59.90
この際eggやovenをだな

634:デフォルトの名無しさん
11/10/01 13:07:50.36
レビューがBoostConと重なったためにまともに評価されなかったんだよね>egg
どう考えてもovenの方がrangeexより優れてる筈なのに・・・どうしてああなった

635:デフォルトの名無しさん
11/10/01 13:51:24.87
|をパイプ処理に使う仕様とかはqtみたいな言語のサブセット的な巨大フレームワークを構築してその中に隔離しておいてくれ

636:デフォルトの名無しさん
11/10/03 09:54:06.59
oerator |  
の定義って斬新だな
フェニックスも大概独自世界構築してるけど| の方がわかりやすくてええわ

637:デフォルトの名無しさん
11/10/03 11:06:36.24
俺はうげーってなるから止めて欲しい

638:デフォルトの名無しさん
11/10/03 13:11:45.27
シェルのパイプからの発想なんだろうけどC++で順序に意味のある結合に|を使うのは一般的になって欲しくない

639:デフォルトの名無しさん
11/10/03 20:59:58.34
同感

640:デフォルトの名無しさん
11/10/04 19:22:39.08
>>633
>eggやoven
boostライセンスだから
作者の許可なしで「改良したもの」をboostに提案しても問題ない予感がするのだが
もちろん作者の名前も入れる

641:progress_display
11/10/04 19:50:11.11
・・・

642:デフォルトの名無しさん
11/10/04 20:34:30.64
返事が無い
ただのdeprecatedのようだ

643:デフォルトの名無しさん
11/10/04 20:37:41.95
誰かが作ったのを別人が改良というのはよく見るから
改良したらいいんじゃないの?

644:デフォルトの名無しさん
11/10/05 19:12:35.16
progress_display って、なんだかんだでみんな一度は使うよね

645:デフォルトの名無しさん
11/10/05 19:13:37.47
boostの親善大使だから

646:デフォルトの名無しさん
11/10/05 19:17:28.31
そうだったのか。。

でも確かに、親善大使という言い方に、しっくりくるものを感じる。。。

647:デフォルトの名無しさん
11/10/06 00:55:35.76
まぁ初めてboost触る人にSpirit薦めるわけにはいかないしねぇ
俺はlexcal_castから入門したけど

648:デフォルトの名無しさん
11/10/06 04:42:44.99
誰もが一発でわかる最も簡単なboost
noncopyableをよろしく

649:デフォルトの名無しさん
11/10/06 07:18:53.85
BOOST_FOREACHがいいんじゃないか

650:やんやん ◆yanyan72E.
11/10/06 10:42:50.54
BGLから入った俺は変態ですか?

651:デフォルトの名無しさん
11/10/06 11:15:42.53
俺はshared_ptrとregex

652:デフォルトの名無しさん
11/10/06 12:00:49.57
俺はtokenizer

653:デフォルトの名無しさん
11/10/06 13:05:24.59
filesystemから入ったかなぁ

654:デフォルトの名無しさん
11/10/06 13:17:38.99
randomだったと思う。

655:デフォルトの名無しさん
11/10/06 13:19:25.53
和訳されてる書籍にあるライブラリしか使えん

656:デフォルトの名無しさん
11/10/06 14:35:14.08
scoped_arrayからかな・・・auto_ptrの配列版探していて知った

ところでprogress_displayを実用した著名ソフトってあるのかしら

657:デフォルトの名無しさん
11/10/06 14:59:48.03
google code検索で検索してみよう

658:デフォルトの名無しさん
11/10/06 19:29:22.00
>>656
めっちゃ有名なライブラリで使ってるよ。

Boost C++ Libraries

659:デフォルトの名無しさん
11/10/06 23:55:45.01
一番最初につかったのが、progress_displayだわ
まぁLet'sboostみながら一番わかりやすそうだったからってだけだが

660:デフォルトの名無しさん
11/10/07 10:59:06.69
意外にもformatが挙がらないな

661:progress_display
11/10/08 01:20:12.74
私の後継に相応しい者はいないようだな
これではまだまだ親善大使を退くわけにはいかんう・・・

662:デフォルトの名無しさん
11/10/08 17:22:29.70
早くprogress_display2.0を作る作業に戻るんだ

663:デフォルトの名無しさん
11/10/08 17:38:11.23
Boost.Timerv2に対応したprogress_displayです!!!1111
みたいにboost.develに投稿してまずはsandbox入りを目指そう

664:デフォルトの名無しさん
11/10/08 17:54:54.35
表示処理部分を差し替え可能にすればなんとか・・・

665:デフォルトの名無しさん
11/10/08 19:09:47.22
誰か>>629とMPIにも対応させてくれ

666:デフォルトの名無しさん
11/10/08 20:21:58.06
そしてboost.interprocessに吸収されるわけですね

667:デフォルトの名無しさん
11/10/09 00:26:41.87
bjamこそprogress_display使うべきじゃね?

668:デフォルトの名無しさん
11/10/19 16:49:04.00
filesystemのwpathってなんでdeprecatedなの?

669:デフォルトの名無しさん
11/10/19 16:51:32.26
ごめん自己解決
pathそのものが両方サポートしてるのね。

670:デフォルトの名無しさん
11/10/25 14:09:17.02
「boost::this_thread」っていう名前空間の「this」ってどんな意味なのでしょうか?
どなたかご存知です?


671:デフォルトの名無しさん
11/10/25 14:12:05.06
このスレ

672:デフォルトの名無しさん
11/10/25 14:16:33.54
>親善大使
簡単にスレッドを使いたくて調べてたらboostにあたった。
boost::thread は非常に簡単でいい。

「boost::this_thread」っていう名前空間の「this」ってどんな意味なのでしょうか?
どなたかご存知です?


673:デフォルトの名無しさん
11/10/25 14:24:37.71
>>670
"this"の意味は「この」。
"this_thread"で「このスレ」。

674:672
11/10/25 19:21:41.47
>>620
あれ?2回も投稿してるし、しかもageてるよ。申し訳ない。

>>671, >>673
ありがとうございます。
助かりました。
説明もらって、Webで見つけたサンプル達を眺めたら理解できました。

675:672
11/10/25 20:36:08.22
連続で失礼!
どちらかというと、Boostというより、C++のクラスについての質問になります。
よろしくお願いします。

URLリンク(melpon.tank.jp)
↑この辺り( Boost.Thread )を読んで試したりしているのですけど、
 boost::this_thread sleep()  ※Static member function sleep()
 boost::this_thread::sleep()  ※Non-member function sleep()
の二つのsleepがあるじゃないですか。それぞれ、
 指定した時間になるまで、現在のスレッドをサスペンドします
 指定した時間が経過するまで、現在のスレッドをサスペンドします
と若干引数の扱いが違いますが、似ています。

threadクラスの中に入れたのと、外(this_thread)に入れたのとで、どのように使い分ければいいのですか?
「中断ポイント」として、利用されるのが前者、程度の違いでしょうか?
何か他に大事なことを知らない気がしています…。



676:672
11/10/25 21:33:35.07
ミスった
×boost::this_thread sleep()  ※Static member function sleep()
○boost::thread sleep()  ※Static member function sleep()

677:デフォルトの名無しさん
11/10/27 18:00:45.65
property_treeのINIパーサーだけど、XMLパーサーみたいに書きこむときに
コメントを再現できないんだろうか?
今は無視して読み飛ばしてるみたいだが。


678:デフォルトの名無しさん
11/10/27 18:05:26.87
コメントなんて読んでどうすんだ

679:デフォルトの名無しさん
11/10/30 20:51:44.73
boost::thread のスレッドが動いているか、それとも終了しているか、を自作の関数を用いないで確認する方法ってあります?

680:デフォルトの名無しさん
11/10/30 21:20:35.33
timed_join

681:679
11/10/31 02:40:46.69
>>680
!!そうかっ!
感動した!
ありがとうございます。

682:デフォルトの名無しさん
11/11/01 00:34:42.48
既存のクラス
namespace Hoge {
struct Fuga // 独自にカウンタを持つ
{
int count ;
int add_ref(void);
int release(void);
};
}
があってintrusive_ptrを使いたいんだけどnamespace Xに追加禁止の場合は
グローバルスコープにintrusive_ptr_add_refとintrusive_ptr_releaseを書くしか無い?
なにかうまい回避策とかあるのかな


683:デフォルトの名無しさん
11/11/01 01:47:51.17
>>682
namespace に追加禁止の意味がわからん。

684:デフォルトの名無しさん
11/11/01 01:54:37.13
Xってどこだよ、おいといて、>>682でHogeの中に置けないならnamespace boostに置く

685:デフォルトの名無しさん
11/11/02 06:59:20.82
URLリンク(melpon.tank.jp)
「Thread Constructor」の説明に書いてある、「*this」って何のことか説明もらえたりしませんか?
呼ばれる関数内でthisとか書いてもthreadのインスタンスメソッドとか呼べないのですけど…。
さっぱりわかりません。


686:685
11/11/02 07:33:33.34
あ、何か急にわかりました。
スレ汚し失礼しました。

687:685
11/11/02 14:26:44.40
>>675
URLリンク(melpon.tank.jp)
これみると、後方互換性のために存在する感じのように見える。
「// 後方互換性のため」のスコープがどこまでなのかがハッキリしないが、たぶん後方互換性に含まれるんだろ。
ちなみに、boost1.47のヘッダみたら、「static」の方の引数の変数名が「this_thread」にあわせられていた。
確信無いので参考までに。

688:デフォルトの名無しさん
11/11/02 20:59:30.05
もう少しよく見ればthread::yield/sleepがthis_thread::yield/sleepを呼び出してるだけなのがわかっただろうになあ

689:679
11/11/05 06:15:53.53
join()・timed_join()(成功)・detach()を複数回実行した時の動作は未定です?
timed_join()を繰り返して、起動した全てのスレが終了したか検知するコードを書いて今はうまく動いているのですけど、
幾つかのスレが終了している最中に、もしも別のスレが起動したらどうなるのかな?デタッチした領域は開放されているから再利用される可能性があるかな?なんて考えて…。
それとも、スレの起動箇所ごとに、アタッチするメモリ番地が決まってるのかな。
そうすると、forやwhileで起動する際に説明がつかないし…。
未定か。

690:デフォルトの名無しさん
11/11/05 11:36:39.78
なに言ってるかわからないがたぶん心配してるようなことにはならないだろ。基本的なところを勘違いしてるように思える。

691:689
11/11/06 22:23:39.49
>>690
レスありがとうです。

スレッド周りのヘッダとcppと読んでみたのですけど、あまりわかりませんでした。
スレッドが終了したかどうかって、Win32 APIとどのようにやり取りするのかわからないのがマズイ気がする。
先は長い…。

ところで、さっきと今との、経過時間をmillisecで取得したいのですけど、Boostを利用すると比較的容易な気がするのですが、どのクラスを利用すればいいでしょうか?
boost::posix_time付近で探しているところですが。

692:689
11/11/06 22:34:54.18
ageてしまいました。すみません。
Win32APIでみつけることができました。GetTickCountで差分をとればいけそうでした。

もしBoostで、同じようなことが出来れば御教示ください。出来れば環境依存は少ない方がいいと思いますし。

693:デフォルトの名無しさん
11/11/06 22:45:34.52
boost::timer

694:デフォルトの名無しさん
11/11/06 23:13:37.80
chrono

695:デフォルトの名無しさん
11/11/07 06:41:56.52
いつもチンコ?って思っちまう

696:デフォルトの名無しさん
11/11/08 17:34:26.68
半年くらい前までは[スマポ]で検索するとスマートポインタのサイトがずらっと出てきたのに
今出てこなくなってるな
こういう新しいものが出たときにもともとあった情報の取得の障害になることをなんていうんだろうね

697:デフォルトの名無しさん
11/11/08 17:36:23.99
産業革命

698:デフォルトの名無しさん
11/11/08 17:54:00.58
シャドウイング

699:デフォルトの名無しさん
11/11/08 21:56:57.82
オレオレ略語使いの憂鬱

700:デフォルトの名無しさん
11/11/09 12:34:52.49
スマポなんて初めて聞いたぞ

701:デフォルトの名無しさん
11/11/09 12:38:10.56
ナマポは生活保護か生ポインタか

702:デフォルトの名無しさん
11/11/12 15:27:47.67
むしろ誰も使ってなかったからグーグル先生の超推理でスマートポインタにヒットしてたんだろ。

いまは使われるようになったからな。

703:デフォルトの名無しさん
11/11/12 18:32:09.00
>>696
10年以上前の話だがCの関数をググれてたのが
PHPに占領されたときは殺意を覚えた

704:デフォルトの名無しさん
11/11/12 18:42:18.38
>>696
いまは「スマ」と打つとsmileageが出てくるように・・・まだなってないか

705:デフォルトの名無しさん
11/11/12 20:10:00.06
clangが規格に忠実すぎてBootのソースがコンパイルできん。

706:デフォルトの名無しさん
11/11/15 07:45:19.68
JOSN用モジュールってありますか?

707:デフォルトの名無しさん
11/11/15 12:43:22.14
>>705
コンパイルエラー晒せ。
直接バグレポートするともっといい。

708:デフォルトの名無しさん
11/11/15 22:07:44.75
>>706
JSON?
boost::property_tree

boost::property_treeを使ってXMLを読み込んでみるコードを書いてるのですけど、
hoge.piyo.fooの要素が複数存在する可能性がある仕様の時、何個あるかしらべるには、foreach使って全て読み込んでみないとわからないですか?
mapのsize()のような関数って無いでしょうか?

709:デフォルトの名無しさん
11/11/16 01:35:08.82
Version 1.48.0
URLリンク(www.boost.org)


710:デフォルトの名無しさん
11/11/16 05:45:06.58
boost に gettext 相当のものってありますか?

711:デフォルトの名無しさん
11/11/16 06:01:45.60
>>710
ちょうどBoost.Localeが入ったぞ

712:デフォルトの名無しさん
11/11/16 09:45:15.35
フェニックスってコンパイルは遅くなるけど
実行時間はふつうにfor文かいたりするのと変わらないの?

713:デフォルトの名無しさん
11/11/16 12:20:42.65
>>706
URLリンク(anon21.qlookblog.net)


714:デフォルトの名無しさん
11/11/17 01:58:09.28
Windowsでstd::locale("en_US.UTF-8")すると死ねますか?

715:デフォルトの名無しさん
11/11/17 01:59:23.32
たぶん無視されるだけかと

716:デフォルトの名無しさん
11/11/17 13:49:42.72
>>712
うん。gccレベルのコンパイラでも最適化オプションつけるとfor文展開と変わらない。
最適化しない場合は知らん。

717:デフォルトの名無しさん
11/11/17 14:52:45.35
1.48.0 released

718:デフォルトの名無しさん
11/11/17 15:59:38.87
Boost.Containerの詳しい解説たのむ
主にflatシリーズ

719:デフォルトの名無しさん
11/11/17 17:27:47.13
> 主にflatシリーズ
ソート済みvector使った擬似setや擬似mapあるだろ。つまりそれ。

720:デフォルトの名無しさん
11/11/17 18:56:20.37
b2 ってのは bjam と同じなの?
1.47.0 から変わったみたいでコンパイルがよく分からなくなった

それと、オプションの toolset は -- がいらなくなったの?

721:デフォルトの名無しさん
11/11/17 19:35:49.47
boost::interprocess::detailから
boost::interprocess::ipcdetailに仕様が変わってるんだな
コンパイルエラー吐かれて初めて気付いた

722:やんやん ◆yanyan72E.
11/11/17 20:16:14.19
俺はbootstrap.shでtoolsetなどのオプションを指定して
b2でコンパイルという感じでやってるけど、
b2をbjamと同じように使うこともできるみたいだね。

723:デフォルトの名無しさん
11/11/17 20:28:23.12
>>719
ありがと

724:デフォルトの名無しさん
11/11/18 13:41:41.76
VC++2008でエラーになる・・・
boost.moveが原因くさい

#include <boost/unordered_map.hpp>

int main()
{
struct data_type
{
boost::unordered_map<int, int> a;
};

data_type a;
const data_type b;
a = b;

return 0;
}


725:デフォルトの名無しさん
11/11/18 16:32:03.78
Why don't you write your version of boost.

726:デフォルトの名無しさん
11/11/18 18:19:04.28
>>724
boostの使用以前にエラー。
クラス型のconstオブジェクトを初期化子なしで初期化する(default-initialized)ときは
そのクラス型はユーザー定義のデフォルトコンストラクタを持っていなければならない。

727:デフォルトの名無しさん
11/11/18 20:45:24.66
property_treeのxml_parserでencodingをutf-8にして
文字列データに日本語を含ませるとunexpected end of dataという例外が飛んできます
utf-8のxmlを読み込むにはどうすればいいんでしょうか?

728:デフォルトの名無しさん
11/11/18 20:46:15.79
data_type a;
data_type b;
a = static_cast<const data_type&>(b);
でもエラーになるな。

729:727
11/11/18 20:47:18.46
あ、ちなみに環境はwindows7でVC++EE2008
boostのバージョンは1.46.1です

730:デフォルトの名無しさん
11/11/18 22:38:19.46
>1.46.1です

731:デフォルトの名無しさん
11/11/19 02:13:30.33
>>724
C++03でのmoveのエミュレーションの限界であり仕様
URLリンク(www.boost.org)

732:デフォルトの名無しさん
11/11/19 02:53:37.99
>>726

733:デフォルトの名無しさん
11/11/19 04:00:51.16
moveエミュレーションってOFFにできないの?

734:デフォルトの名無しさん
11/11/19 08:18:33.39
>>726は規格準拠の動作。VC++で出るべきエラーが出ないのはいつものことなのでお察しください

735:デフォルトの名無しさん
11/11/19 13:13:26.51
よくわからんけど>>728が通らないっていろいろ問題でないか?

736:デフォルトの名無しさん
11/11/19 14:04:06.67
std::mapに変えてcodepadで試したけどエラー出なかったぞ

737:デフォルトの名無しさん
11/11/19 15:16:38.02
>>726はclangとかで試せばエラーになるだろうけど
とりあえずboostとは関係ないし軽く流せよ

738:デフォルトの名無しさん
11/11/19 16:22:22.43
へえ

739:デフォルトの名無しさん
11/11/19 17:02:27.30
>>733
1.47とか古いboost使えば

>>735
boost1.48のコンテナを使うならdata_typeに必要なメンバを追加すれば通るようにはできる

>>736
どういう話だ。
>>724,728が言いたかったのはboost1.48のコンテナを使ったときの話でstd::mapでは再現しない。
>>726が言ってるのはこういう話 URLリンク(codepad.org)

740:デフォルトの名無しさん
11/11/19 17:02:36.69
Boost.Containerのパフォーマンスに期待

741:デフォルトの名無しさん
11/11/19 23:12:47.21
>>730
治りました!
ありがとうございます

742:デフォルトの名無しさん
11/11/20 07:40:41.25
Visual C++向けのboostのlibのディレクトリを覗くと、
 (1)boost~.dll
 (2)boost~.lib
 (3)libboost~.lib ※:~の部分は同じ
という3種類のファイルがあるのですけど、それぞれ何なのですか?

何となく、(3)が静的リンクなライブラリの本体で、
(1)が動的リンクなライブラリの本体で、(2)が(1)向けのインポートライブラリかなぁなんて考えたのですが、
どうして静的と動的と両方あるのだろうか?と考えると、さっぱりわかりません。
boostって静的リンクじゃないのですか?

743:デフォルトの名無しさん
11/11/20 08:38:29.93
どこでダウンロードしたやつだ
公式じゃないよな?

744:デフォルトの名無しさん
11/11/20 10:05:05.07
インストーラ配布してるとこがあるじゃん
んで、boostライブラリにはダイナミックリンクとスタティックリンクの2種類があるよ
ファイルの区別は>>742の通りで間違い無い

もう少し詳しくいうと、末尾に-sgdが付いているのがデバッグCRTスタティックリンク型(/MTd)、
-sが付いているのがCRTスタティックリンク型(/MT)、
-gdが付いているのはデバッグCRTダイナミックリンク型(/MDd)、
何も付いていないのがCRTダイナミックリンク型(/MD)
その他命名規則の詳細はこちら
URLリンク(www.boost.org)

745:デフォルトの名無しさん
11/11/21 07:27:35.14
実際スタティックリンクの方が速いな
ダイナミックリンクはどうしてもコールゲートを通すのでリングレベルの移行など
CPUで処理すべき仕事が多く相当速度が落ちる

速度とサイズのトレードオフか
でもDLLやsoもメモリ内に読み込むのでサイズが小さいとも言えないし
同時に走らせるプログラムが多くなってきた時だけ違う

746:デフォルトの名無しさん
11/11/21 07:44:52.93


747:デフォルトの名無しさん
11/11/21 11:36:28.84
dllでコールゲート通らないし
しかもリング変えるのにコールゲートとかいつの話だ

748:デフォルトの名無しさん
11/11/21 12:13:15.70
聞いたことある単語を適当に並べてみただけって感じの文だな

749:デフォルトの名無しさん
11/11/21 12:14:32.91
ダイナミックリンクでコールゲートを通すような処理系を教えてくれよ

750:デフォルトの名無しさん
11/11/21 16:19:33.53
リンク時の最適化が効かない以外はあんまかわらんかね

751:デフォルトの名無しさん
11/11/24 00:57:26.19
コールゲートが必要なのはカーネルだけだろ。
カーネルの場合は、ゲートとなるアドレスが記述されていて、
そこへ飛ぶとメモリー空間がユーザー空間からカーネル空間へ変わる。
通常のDLLは、ユーザー空間にコードマッピングして、関数テーブルを
そこのアドレスに書き換えてるだけ。

752:デフォルトの名無しさん
11/11/24 21:03:45.95
助けてください ><
boost::tupleのメンバ関数get<N>をboost::lambda::bindで束縛するにはどうしたらいいでしょう?

下記のコードでは、

error: invalid static_cast from type ‘<unresolved overloaded function type>’ to
type ‘int (*)(const boost::tuples::tuple<int, int, boost::tuples::null_type, boost::tuples::null_type, ....

と言われてしまいます。

get<N>のテンプレート周りかなと思うのですが。。

using namespace boost::lambda;
int r;

r = (bind(
static_cast<int(*)(const boost::tuple<int,int>&)>( &boost::tuple<int,int>::get<0> ),
_1)
) (boost::tuple<int,int>(1,1));


753:デフォルトの名無しさん
11/11/24 21:43:07.29
static_cast<const int&(boost::tuple<int,int>::*)()const>(&boost::tuple<int,int>::get<0>)
メンバ関数がどんな型になるか勉強しなおしたほうがよさそう

754:デフォルトの名無しさん
11/11/24 22:03:39.03
>>753
ありがとうございます!
いろいろとカン違いしていました。
返り値型がconst int &というのも言われてみればなるほどで、
自分はまだまだ勉強が足りないですね。。

755:デフォルトの名無しさん
11/11/25 00:07:39.70
read_xmlでunicodeが読めないのですが仕様ですか?
引数にマルチバイト文字しか受け付けないし、
文字コード宣言があるXML文書のパースを
ロケール指定して使うproperty_treeに依存するとかあほですか

756:デフォルトの名無しさん
11/11/25 16:11:45.03
yes

757:デフォルトの名無しさん
11/11/25 22:45:17.23
boost.spirit.qiでセマンティックアクションから、
一致したruleのrangeを示すiteratorが欲しいのですがclassicを使うしか方法はないのでしょうか?
例えば、以下の様にしたいです。

void action(Iter first, Iter last){ ... }
//...
(char_('(') >> *char_('0') >> char_(')'))[action];

758:デフォルトの名無しさん
11/11/25 22:48:13.14
ptreeはutf8一択と心に決めて使うものだし

759:デフォルトの名無しさん
11/11/26 13:15:59.82
tupleってfusionよりメリットある部分あるの?

760:デフォルトの名無しさん
11/11/26 15:08:01.25
機能が少ない分全貌を把握しやすくてとっつきやすい。
TMPに馴染みのない人がfusionの説明見たら引くでしょ。

761:デフォルトの名無しさん
11/11/26 20:56:08.16
そしてtupleのソースコードを読んで引く

762:デフォルトの名無しさん
11/11/26 20:58:58.39
俺なんかanyですらやや引きだぜ

763:デフォルトの名無しさん
11/11/26 21:23:12.42
any使えて嬉しいことって人生で一度でもあればいいほうだよね

764:デフォルトの名無しさん
11/11/26 21:25:13.00
>>753
オレオレ言語作るときに使えないか期待している。
しかし、まだ俺にそのスキルはない。。。

765:デフォルトの名無しさん
11/11/27 00:43:23.40
ヘッダをプリコンパイルヘッダーに突っ込んでも遅い。
みんなどうやってんの?

766:デフォルトの名無しさん
11/11/27 00:45:44.67
PCを買い替える

767:デフォルトの名無しさん
11/11/27 00:49:14.99
それどころかヘッダファイルをRAMDISK上に置いても遅い
極限までOCするとちょっと速くなる
結局並列ビルドが効く様な構成にしてその上でクロック周波数を極限まで上げるしかない
後はメモリアクセス速度とCPUのキャッシュ容量も効いてくるかもな

768:デフォルトの名無しさん
11/11/27 02:26:15.97
boostのヘッダー1個、boostを使うソース1個でも十分遅いからな。

769:デフォルトの名無しさん
11/11/27 08:09:02.14
64bitにする

770:デフォルトの名無しさん
11/11/28 09:48:46.81
多倍長整数型の一桁ずつをint型の配列に入れるために、
多倍長整数型をまずstringに代入し、一桁ずつの分割をして、それをboostでint型に変換してみようとしています。
つまり、charを使わないで
多倍長整数→string→string一桁ずつ→int
の変換をしたいのです。
お尋ねしたいのが、string→string一桁ずつの変換をどのように行ったらいいのかということなんです。
もしわかる方がいらっしゃるなら教えていただけると嬉しいです。

771:770
11/11/28 09:55:53.46
>>770に補足で、言語はc++です。

772:デフォルトの名無しさん
11/11/28 10:14:46.90
基数のべき乗で割ったあまり使えば?

773:デフォルトの名無しさん
11/11/28 10:16:56.88
>>772
言われてみればそうやれば簡単にできそうですね

774:デフォルトの名無しさん
11/11/30 03:44:49.48
OpenMPのような並列ライブラリってありますかね?
素直にboost::threadですかね・・・

boost Proの全自動インストーラーのほうが便利ですね
入れるなら

775:デフォルトの名無しさん
11/12/02 21:24:52.86
boost.fusionあたり使ってstd::vectorだろうが構造体だろうが
かたっぱしからオブジェクトのメンバーをprintしてくれる
debug関数みたいなのないですか

776:デフォルトの名無しさん
11/12/03 13:04:42.91
grep のことかな

777:デフォルトの名無しさん
11/12/03 18:27:57.73
デバッガでウオッチすればいい

778:デフォルトの名無しさん
11/12/03 19:10:34.41
シリアリズしてstd::cout

779:デフォルトの名無しさん
11/12/04 01:45:36.46
シリアライズのコードぱくれば作れそうだな

780:デフォルトの名無しさん
11/12/07 12:42:57.64
boost::this_thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(1));
boost::this_thread::sleep(boost::posix_time::milliseconds(1));
↑ふたつって、意味は同じ?
それとも、下側のソースは、基準になる現在時刻がないから、最低の時間(オーバヘッド)のsleepになる?
どういうルールでどのテンプレートが利用されるのかが理解できないです。
よろしくおねがいします。
…boostスレに書いたほうがいいです?(過疎ってるみたいなのでこちらに書いてみました。)

>【初心者歓迎】C/C++室 Ver.76【環境依存OK
>>836 @ 2011/11/30(水) 10:57:59.02
でも同じ質問を書きましたのでマルチです。1week経ったので引っ越しました。

781:デフォルトの名無しさん
11/12/07 15:53:52.11
boostのメルセンヌ・ツイスタを自作のアプリケーションに使用した場合にも
「著作権表示、ライセンス条文、無保証の旨」を書かないと駄目なんでしょうか?
それとメルセンヌ・ツイスタに限らずboostを利用する際にライセンスに関わる注意点はありますか?




782:デフォルトの名無しさん
11/12/07 16:34:29.67
>>781
random/mersenne_twister.hpp を見るとライセンスがURLリンク(www.boost.org)であるとわかる。
バイナリ配布にあたってはライセンス同梱は必要ないようだが、
mersenne_twister.hpp込みでソースを配布するならライセンス表示、同梱は必要だろう。
これはboost全体に言える。

783:デフォルトの名無しさん
11/12/07 16:44:24.56
>>782
ありがとうございます
ヘッダを見ればよかったんですね

784:デフォルトの名無しさん
11/12/07 20:15:47.01
>>780
> boost::this_thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(1));
> boost::this_thread::sleep(boost::posix_time::milliseconds(1));
> ↑ふたつって、意味は同じ?
意味は違うがよっぽど変な状況でないかぎり結果は同じ。

this_thread::sleepには指定した日時まで待機するのと指定した期間の間待機するのと二種類ある。
上側は指定した日時(たとえば01時23分45秒まで。上の例だと現在時刻の1ミリ秒後)まで待機するもので
下側は指定した期間(たとえば1秒間。上の例だと1ミリ秒間)待機するもの。
どっちになるかは引数の型で決まる。

785:デフォルトの名無しさん
11/12/15 07:47:16.25
Boost.Regex って、UTF8 テキストに対して使えますか?
例えば、"." を検索すると”あ”等のマルチバイト文字にマッチするのでしょうか?


786:デフォルトの名無しさん
11/12/15 07:48:07.75
使えない

787:デフォルトの名無しさん
11/12/15 12:25:20.07
ダメじゃん

788:デフォルトの名無しさん
11/12/15 13:51:07.46
馬鹿には無理

789:デフォルトの名無しさん
11/12/16 06:51:38.22
Boost.Anyなんて使うならLuaを組み込んだほうがまし

790:デフォルトの名無しさん
11/12/20 03:53:05.45
variantやanyを使って実行速度遅くするなら
工夫してunion使った方がマシな気がする
実行速度を落さないunionの拡張はboostにないのだろうか

791:デフォルトの名無しさん
11/12/20 08:49:08.27
>>790
素の union で何が不満なの?

792:デフォルトの名無しさん
11/12/20 10:41:49.00
unrestricted union使うぐらいならvariantでいいや

793:デフォルトの名無しさん
12/01/03 13:59:33.58
boost::array<int,5> arr = { {1,2,3,4,5} };


arrayで要素数を省略した初期化って現状不可能ですか?



794:デフォルトの名無しさん
12/01/03 17:48:55.48
微妙に意味がわからないがテンプレートをインスタンス化するときの<int,5>の5の省略は不可能(おそらくずっと)

795:デフォルトの名無しさん
12/01/03 18:12:16.28
要素数の後決めしたいとか、array使う意味が皆無になるんだが。

796:デフォルトの名無しさん
12/01/03 18:51:36.87
やっぱり不可能ですか、、、
後決めしたいというより、ただただ書くのを省略したいだけなんですがね。。。

797:デフォルトの名無しさん
12/01/03 19:16:16.71
>>796
#include <iostream>
#include <boost/array.hpp>
#define ARY(t, n, ...) \
static const t n ## _[] = {__VA_ARGS__}; \
boost::array<t, sizeof (n ## _) / sizeof (n ## _[0])> n = {{__VA_ARGS__}}
int main()
{
ARY(int, arr, 1, 2, 3, 4, 5);
std::cout << arr[2] << std::endl;
return 0;
}

省略できてもあまり嬉しくなかった。

798:デフォルトの名無しさん
12/01/03 19:45:18.04
int a[] = {1, 2};
のような事をしたかったってことなんだろうね

799:デフォルトの名無しさん
12/01/03 20:56:46.18
まさにそれをしたかった。なぜそうしなかったかというと、境界チェック付きの
配列を使いたかったから。

800:デフォルトの名無しさん
12/01/03 21:55:20.06
別スレで同じこといってるやつみたけど
結局boost使うことにしたのかな

801:デフォルトの名無しさん
12/01/06 12:54:36.97
ublasってopencvより遅い気がするのだけど気のせい?
ublasの方が速い場合ってエクスプレッショナルテンプレートが効く場合だけ?
gccのコンパイルオプションで同じぐらいの速度にならないものだろうか

802:デフォルトの名無しさん
12/01/06 14:50:46.10
>>797
どうでもいいがプリプロセッサの
可変長引数でコンパイルエラー
世の中C99対応のコンパイラばかりではない


803:デフォルトの名無しさん
12/01/06 14:54:39.38
>>801
分岐の少ない問題でOpenCVがublasごときに負けたら
OpenCVの存在意義が無くなると思うが?
OpenCVはGPUを使って数百の並列実行してるんだからな。

804:デフォルトの名無しさん
12/01/06 21:00:18.40
lexical_cast ってスレッドセーフ?


805:デフォルトの名無しさん
12/01/07 20:45:04.63
corutineはそろそろ正式リリースしてくれないものか

806:progress_display
12/01/08 15:36:56.20
明けましておめでとうございます。
挨拶が遅くなり申し訳ありませんが、今年も何卒宜しくお願いいたします。

807:デフォルトの名無しさん
12/01/09 13:20:18.76
>>806
開けましておめでとうございます。

ところで、後でちょっとお話がありますので、
会議室を1時間くらい予約しておいてください

よろしく

808:progress_display
12/01/09 14:36:31.42
>>807
やだ課長、1時間は短いですよぉ

809:Regex
12/01/09 17:52:20.64
>>808
打ち合わせどうだった?
何言われたの??

810:boost::tuple
12/01/09 20:23:36.80
さてと、C++11への引っ越しを始めるとするか・・・。

811:デフォルトの名無しさん
12/01/09 20:26:00.89
corutineがいろいろ改変されたのあって
どれが一番いいのかわからない
x86 amd64 のwindows linux mac で動けばいいのだけど

812:progress_display
12/01/13 23:37:40.00
@typeに登録しておこう(´;ω;`)

813:デフォルトの名無しさん
12/01/13 23:51:00.44
shared_ptrってスレッドオフしてallocate_sharedすればintrusive_ptrとパフォーマンスたいして変わらんっすよね?

814:デフォルトの名無しさん
12/01/14 05:42:46.00
shared_ptrのサイズはポインタ二つ分。
共有管理オブジェクトにはweak_ptr用のカウンタもある。
大した違いかどうかは場合による。

815:デフォルトの名無しさん
12/01/14 09:35:55.06
メモリ intrusive_ptr
生成破棄 intrusive_ptr
参照カウント増減 shared_ptr

816:デフォルトの名無しさん
12/01/18 15:11:46.99
URLリンク(www.boost.org)
自分で定義した(例えば多倍精度浮動小数点数)型を数学関数内部でも使える様にするにはどうすればいいですか?

817:デフォルトの名無しさん
12/01/18 23:51:54.60
URLリンク(www.boost.org)
やったことはないがその型に対してこれ↑を満たすように必要なものを自分で書けばboost::mathでその型を使えるんだろ

818:デフォルトの名無しさん
12/01/20 03:32:32.30
void func2( boost::array<int, 3> & c)
{
c.assign( 0 );
}
error: invalid initialization of reference of type ‘boost::array<int, 3ul>&’ from expression of type ‘const boost::array<int, 3ul>’

arrayを参照引数にできないんだっけ?

819:デフォルトの名無しさん
12/01/20 07:59:21.04
>>818
おまいはエラーメッセージも読めんのか?

820:デフォルトの名無しさん
12/01/20 08:58:09.76
ああ!constついてました

821:デフォルトの名無しさん
12/01/21 05:12:42.79
boost::fusion::list a の先頭要素が
a.begin()
で参照できないのがちょっと気持ち悪い

822:デフォルトの名無しさん
12/02/01 23:49:52.05
bjamの利点がわからないのですが、autoconfとかを用いずbjamを利用してるのは何故でしょうか?

823:デフォルトの名無しさん
12/02/02 00:18:21.01
POCOとほとんど同じ機能持つライブラリ
ありませんか?

824:デフォルトの名無しさん
12/02/02 16:01:00.05
ubuntuでboost入れたら一瞬でインスコ完了で使えるようになった
一方、Windowsではサイズがでかい上にビルドにかなり時間がかかる。
この差はなんでつか?ちなみにWindowsではVCで使う感じです

825:デフォルトの名無しさん
12/02/02 16:32:49.79
apt-get とかでパッケージをインストールしたんのなら、既にバイナリが含まれてるからだろ。

826:デフォルトの名無しさん
12/02/02 17:06:15.79
なるへそ
Windowsでは全部落としてきて自分でビルドしたからか

827:デフォルトの名無しさん
12/02/03 01:20:40.57
>>823
なんでpoco不可?

828:デフォルトの名無しさん
12/02/03 08:07:34.00
ポコチン

829:デフォルトの名無しさん
12/02/05 22:05:47.61
ちんぽこ

830:デフォルトの名無しさん
12/02/06 23:10:55.09
ちんぽこ商用ライセンスだと制限きついしなぁ

831:デフォルトの名無しさん
12/02/09 00:01:35.59
VC2010 Essentialsを使っています。
boost::serializationを使うと、アプリケーションを作成するためのプロジェクトでも
.libと.expを作ってくれるようになるのですが、これを抑制する方法はないでしょうか?

832:デフォルトの名無しさん
12/02/09 00:02:11.18
ちんぼ

833:デフォルトの名無しさん
12/02/09 01:54:03.78
っぽ

834:デフォルトの名無しさん
12/02/09 02:07:40.85
ぬるぽ

835:デフォルトの名無しさん
12/02/09 12:57:55.72
>>831
前に別のライブラリで同じ症状に遭ったことがあるけど、解決策見つからず

本当にどうしても嫌なら、ビルド後のプロセスでdelするとか・・・

836:デフォルトの名無しさん
12/02/09 15:29:48.48
libが生成されるってことはエクスポートテーブルもできてるんだから
ファイルを消せばいいってもんじゃないだろ

どこかで間違えて__delcspec(dllexport)が定義されてるんだろうね

837:デフォルトの名無しさん
12/02/09 18:34:24.22
serializationがらみで
URLリンク(codepad.org)

boost::shared_ptrのシリアライズコードを改造して、std::shared_ptr用の物を書いたのですが、
コレにカスタムデリータのサポートを追加するいいアイデア無いでしょうか?


838:デフォルトの名無しさん
12/02/09 22:45:06.20
poco高すぎだろ
pro買わないとネットワーク系全滅だし

839:デフォルトの名無しさん
12/02/10 12:34:22.38
>>824
linuxでC++やるときってエディタ何使うんですか
emacsのタグジャンプの設定で苦労した覚えが
今はもっといいのあるんだろうか

840:デフォルトの名無しさん
12/02/10 17:27:39.08
現在Boostのthreadを使って、ワークパイルを管理するクラス、各スレッドに付随するクラス(ワーカーとします)を作っています。
ワーカーは仕事を一通り終えた後、管理クラスが終了許可を出すまで「待ち」を行うようにするため、mutexとconditionを用いています。
管理クラスが終了許可を出せば「待ち」が解除されてスレッドとして動作していた関数を完了するのですが、待ちが解除されるときにmutexにロックがかけられてしまいます(それより前でmutexにロックはかけていない)。
そのため、ワーカーが破棄されるときにmutexでunlock()関数を使わないとエラーが生じます。

ワーカーで行いたいことは通知が来るまで待つだけで、排他制御の必要はありませんが、わざわざunlock()を使わなければならないのでしょうか。
イメージ的にはconditionにmutexを渡さないwait()があれば期待通りになりそうなのですが、それは存在しません。

よろしくお願いします。また私の解釈に間違いがあれば指摘いただけると幸いです。

841:デフォルトの名無しさん
12/02/11 16:10:52.17
待つだけでいいならミューテックスでもいいのでは…そういう話ではない…?
#include <iostream>
#include <boost/thread.hpp>
#include <unistd.h>
void f( boost::mutex* guard )
{
std::cout << "worker: working" << std::endl;
std::cout << "worker: waiting until the mutex was unlocked" << std::endl; guard->lock();
std::cout << "worker: finished" << std::endl; guard->unlock();
}
int main()
{
boost::mutex m;
std::cout << "main: lock a mutex" << std::endl; m.lock();
std::cout << "main: create a worker" << std::endl; boost::thread worker(&f,&m);
std::cout << "main: sleeping 3 seconds" << std::endl; sleep(3);
std::cout << "main: unlock the mutex" << std::endl; m.unlock();
std::cout << "main: waiting for join" << std::endl; worker.join();
std::cout << "main: finished" << std::endl;
return 0;
}

$ ./sample
main: lock a mutex
main: create a worker
main: sleeping 3 seconds
worker: working
worker: waiting until the mutex was unlocked
main: unlock the mutex
main: waiting for join
worker: finished
main: finished

842:デフォルトの名無しさん
12/02/11 17:00:53.33
>>841
返信ありがとうございます。
管理側は仕事追加・終了許可時に、ワーカーのインスタンスそれぞれのメンバー変数であるconditionでnotifyすることで待ちを解除させています。
ワーカーは、管理側が仕事を追加すると通知を受けて仕事を開始するためにwhileループ内で待ちを行っています。(終了許可待ちと仕事待ちは共通のconditionとmutex)
void Worker::run() {
 while (true) {
   TaskData* task = NULL;
   while (_taskBag->getTasks(&task)) {
     job(task);
   }
   if (_finishable && _taskBag->numTasks() == 0) {
     _mtx.unlock();
     break;
   }
   _cond.wait(_mtx);
 }
}
ワーカーが複数いるので、mutexロック解除で待ち解除の通知を行うと、「仕事追加→いずれかのワーカーが仕事に着手」の後にmutexの所有権が管理側に戻ってこないかもしれないので難しそうです。
まぁ実装の仕方次第でmutexだけでもいけそうですが。

あとよくよく考えると_cond.wait(_mtx)の時に暗黙的に_cond.wait(mutex::scoped_lock(_mtx))のようになっているんでしょうか。
となると、ロックがwait解除後に再度かけられてしまうのはある意味当たり前ですね。

申し訳ありません。簡潔な文章で伝えるのがもの凄く難しいですねw

843:デフォルトの名無しさん
12/02/12 07:46:49.88
waitにはmutexをロック済みのunique_lock渡す必要がある。直接mutexをwaitの渡せているのはたぶんVCのせい。
unique_lockのローカル変数を作ればunlockを呼び出す必要は無い。
condition_variableは他の変数と一緒に使うことが前提。
waitはnotifyの通知以外でも誤って解除されるのでbool変数などと合わせて使わないとだめ。
bool変数で確認するからにはmutexでの排他制御が必要。

844:デフォルトの名無しさん
12/02/13 09:57:29.58
>>843
ありがとうございます。
排他制御が要らなく見えていたので、待ちの実現だけにcondition、mutex両方を使うことに冗長さを感じていたのですが、conditionはそもそも単体では使わないものなんですね。

ちなみに_cond.wait(_mtx)の記述はXcode4.2でもできています。C++の引数1つの場合の暗黙的なコンストラクターですね。
こういう場合に暗黙的にできてしまうと見落としてしまう場合があって危険だと感じます。

845:デフォルトの名無しさん
12/02/13 11:57:41.20
>>844
それじゃあboostのバージョンが低いだけじゃないの?一時変数は非const参照に拘束できない。

846:デフォルトの名無しさん
12/02/13 19:45:57.66
>>845
Boost 1.48です。ちなみに上記の_mtxはワーカークラスのメンバー変数です。

847:デフォルトの名無しさん
12/02/13 19:55:58.52
>>846
そうか。あとはコードを実際に追わないと分からないわ。

848:デフォルトの名無しさん
12/02/14 07:34:07.70
boost::asioの非同期通信でhttpクライアントつくろうと思ってasync_read_someでデータ取ってるんだけど、何故か5kbくらいでデータが途中で切れちゃうんだ
誰かピンとくる人居ないか…助けてくれ

849:デフォルトの名無しさん
12/02/15 01:04:19.29
>>848
async_read_until使えば?

850:デフォルトの名無しさん
12/02/15 15:40:45.11
今作成中のプログラムに<boost/thread.hpp>と<boost/thread/condition.hpp>をインクルードすると、システムのlocale_facets.tccとboostのshared_count.hppにおいて大量のエラーが発生します。
これらのファイル自体には問題は無く、何らかの依存関係でエラーが出ているんだろうということは想像がつくのですが、全く原因がわかりません。

何かこのような現象について心当たりのある方は居られないでしょうか。

Xcode4.2で、ヘッダーサーチパスには/opt/local/includeを(boostはこの下にインストール)設定しています。ライブラリーファイルのリンクも行っています。

よろしくお願いします。

851:デフォルトの名無しさん
12/02/15 19:46:15.26
>>850ですが、自己解決しました。申し訳有りません。

原因はboostを使っているソースファイルとは別のファイル内で定義した「swap」という名称のマクロでした。
それぞれのソースファイルを最終的にmain関数で参照する形となっていたためにboost内の何かとマクロ名が衝突したようです。

自分で定義したswapをユニークな名称に変更することで解決しました。

今後どなたかの参考になれば幸いです。

852:デフォルトの名無しさん
12/02/15 19:49:52.51
こらたかし!マクロは全部大文字にって言ったでしょ!

853:デフォルトの名無しさん
12/02/15 21:30:41.91
さすがにswapをマクロ名にするのはないな

854:デフォルトの名無しさん
12/02/15 22:26:50.21
cpp側なら問題なかったのですが、実装も含めたヘッダーに書いてしまったのが盲点の原因でした...

855:デフォルトの名無しさん
12/02/15 22:40:49.07
気が、狂っとる

856:デフォルトの名無しさん
12/02/15 22:45:19.13
君は優秀な人材だぜひマイクロソフトに就職しなさい

857:デフォルトの名無しさん
12/02/15 22:53:13.67
>cpp側なら問題なかったのですが
よくねぇよ。
規格にちゃんと、

「標準ライブラリーのヘッダーをincludeする翻訳単位は、全標準ライブラリーヘッダーで宣言されている名前を#defineもしくは#undefしてはならない。」

と書いてある。
だから、ひとつでもどれか標準ライブラリーのヘッダーをincludeしたならば、swapという名前は#defineも#undefもできない。

858:デフォルトの名無しさん
12/02/15 23:06:42.94
min
max

859:デフォルトの名無しさん
12/02/15 23:27:50.00
>>857
swapって名前標準ライブラリーにあるの?

860:デフォルトの名無しさん
12/02/15 23:29:27.19
あぁalgorithmにあるのか。使ったこと無かったわ。

861:デフォルトの名無しさん
12/02/15 23:29:55.03
嘘だろ…

862:デフォルトの名無しさん
12/02/15 23:34:09.02
iostreamをインクルードするだけで使えるというのに・・・。

863:デフォルトの名無しさん
12/02/15 23:44:50.77
>>859
名前だぞ名前。
クラスのメンバーにも等しく適用されると何故わからないんだ。
多くの標準ライブラリのクラスがswapという名前のメンバーを持っているのを知らないのか。

864:デフォルトの名無しさん
12/02/16 00:11:46.32
>>858
MSは禿にごめんなさいしないといけないよね

865:デフォルトの名無しさん
12/02/16 03:25:04.66
C++にテンプレートが無い様な時代から既に用意されてたんだから
後出しのハゲが謝りお願いすべき

866:デフォルトの名無しさん
12/02/16 03:49:30.66
小文字が入ってるマクロ名は紛らわしいから
コンパイラが警告吐いてくれたらいいのにな

867:デフォルトの名無しさん
12/02/16 07:22:59.71
assertみたいなマクロ実装関数で警告が出ることになるか
ところでassertをキーワードに昇格させて定数式なら
コンパイル時エラー出す設計にはできなかったのかな
そうするとstatic_assertと書き分けなくて良いような気もするけれど

868:デフォルトの名無しさん
12/02/16 12:13:03.95
例によってCとの互換性が

869:デフォルトの名無しさん
12/02/16 12:38:53.66
staticの方はともかくassertってあんまし使わなくねーか?

870:デフォルトの名無しさん
12/02/16 12:38:56.08
iOS開発でObjCのコンテナクラス類使わずにどうもSTL/boost多用してしまうんだけど
果たしてこれはよくないのかどうか・・・

871:デフォルトの名無しさん
12/02/16 15:37:52.34
threadのwaitってどこのサイトみても

while(!ready) {
 cond.wait(lock);
}

のようになっていますよね。これを起こす場合には
ready = true;
cond.notify_all();
とすると思うのですが、while分の!readyを判定してからcon.waitをかけるまでの間に上記の起こすコードが呼ばれた場合には、動かなくなってしまう気がします。

これを回避する方法などあるのでしょうか。timed_waitでしょうか。

872:デフォルトの名無しさん
12/02/16 18:47:36.71
>>871
cond.wait(lock);でロックを要求している素晴らしい設計を無視するなよ

873:デフォルトの名無しさん
12/02/16 19:01:27.73
>>872
ありがとうございます。
よくよく考えてみるとwhile文の前と起こすコードの先頭でミューテックスをロックすればいいんですね。
今まで引っかかっていたものがスッキリとれました!

874:デフォルトの名無しさん
12/02/16 21:10:13.56
>>872,873を理解するまで1時間かかってしまった

875:デフォルトの名無しさん
12/02/27 18:51:24.80
1.49出たのに反応なしか

876:デフォルトの名無しさん
12/03/01 01:31:34.53
小学生並みの発想だな

877:デフォルトの名無しさん
12/03/04 14:05:48.47
中学生並みの反応だな

878:デフォルトの名無しさん
12/03/06 21:26:03.54
大学生並の考察だな

879:デフォルトの名無しさん
12/03/06 22:17:31.08
院生並の皮肉だな

880:デフォルトの名無しさん
12/03/06 23:36:14.79
社会人並みの判断だな

881:デフォルトの名無しさん
12/03/06 23:51:07.07
年金生活者は余裕だな。

882:デフォルトの名無しさん
12/03/07 00:00:44.76
病院生活並の苦労だな

883:デフォルトの名無しさん
12/03/07 09:58:05.77
世捨て人並の達観だな

884:デフォルトの名無しさん
12/03/07 18:03:57.16
銀河皇帝並みの独断だな

885:デフォルトの名無しさん
12/03/10 00:18:09.27
原子核級の大志だな

886:デフォルトの名無しさん
12/03/10 14:27:31.51
風俗嬢並の偏屈だな

887:デフォルトの名無しさん
12/03/11 00:11:07.28
俺並みの性欲だな

888:デフォルトの名無しさん
12/03/11 00:46:18.10
風説の流布

889:デフォルトの名無しさん
12/03/11 02:29:45.81
痛風の呂布

890:デフォルトの名無しさん
12/03/11 09:45:46.39
風呂の風俗

891:デフォルトの名無しさん
12/03/11 18:41:57.17
温泉の効能

892:デフォルトの名無しさん
12/03/11 20:16:36.14
駄レスがスレをboostする!

893:デフォルトの名無しさん
12/03/11 23:11:17.86
歌舞伎町の893

894:デフォルトの名無しさん
12/03/11 23:36:25.70
ゲスの極み

895:デフォルトの名無しさん
12/03/11 23:45:41.65
お肉の厚み

896:デフォルトの名無しさん
12/03/12 00:07:56.91
boostってC++11の要素は取り込みはじめてるの?

897:デフォルトの名無しさん
12/03/12 00:33:35.99
C++11がBoostを取り込んだの間違いだろ
Boost.Moveのことなら知らん

898:デフォルトの名無しさん
12/03/12 00:37:49.12
Boost.Chrono とかは C++11 からの逆輸入。

899:デフォルトの名無しさん
12/03/12 00:49:09.56
既存コンパイラで動くようにしてくれてるならいいことだ

900:デフォルトの名無しさん
12/03/13 00:46:51.29
◆ 便利な今までに出た風説の流布一覧
伝説の流川
伝説の呂布
解説の掛布
風疹の漁夫
ふーてんの流浪
妖鳥の流布
入れ墨の鯨布
風の谷の呂布
骨折に湿布
聖教新聞の配布
電設の鈴木
通風の湿布
テンセルの毛布
テンソルの分布
ピンサロの主婦
風雪ながれ旅
風雪の露天風呂
風俗で炉利
風俗の幕府
風てんのトラ
温泉の掛川
風の谷のナウシカ
季布の一諾
空席の椅子
秀策の棋譜
特攻の拓
ピンフの20符

901:progress_display
12/03/19 23:18:49.04
最近おれっちの話が出来ていないが、C++11先取りしておれっちを実装するコンパイラってまだ出てきてないの?

902:デフォルトの名無しさん
12/03/24 20:20:56.52
serialization を使ったときに、exe ファイルにいろんなシンボルがエクスポートされるのを防ぐ方法ってないでしょうか?

903:デフォルトの名無しさん
12/03/25 11:34:46.67
仕様です

904:営利利用に関するLR審議中@詳細は自治スレへ
12/04/01 06:51:48.14
>>901
あれ、あなた風の噂で左遷されたって噂を聞いてたけど・・・?

905:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 19:36:20.60
boost::optional<int> test () { return 1; }

void func {
if (auto i = test() && i.get() != -1) {
return ;
}
}
これコンパイル通らないけどどうして?

906:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 20:00:01.39
funcの定義

907:営利利用に関するLR審議中@詳細は自治スレへ
12/04/11 20:16:53.92
void func () {
      ↑

908:デフォルトの名無しさん
12/04/11 21:59:09.93
>>905 エラーメッセージ見ろよ。

909:デフォルトの名無しさん
12/04/12 00:58:06.25
>>906-908
そこじゃなくて
>if (auto i = test() && i.get() != -1) {
俺が言いたいのはこっちのほうだった
auto i = test()この段階で初期化されてるはずなんだけどどうして無理なんだろう

910:デフォルトの名無しさん
12/04/12 01:05:06.21
>>909
規定された条件部の文法↓にマッチしないから。
condition:
  expression
  attribute-specifier-seq/opt decl-specifier-seq declarator = initializer-clause
  attribute-specifier-seq/opt decl-specifier-seq declarator braced-init-list

911:デフォルトの名無しさん
12/04/12 01:25:55.07
>>910
そもそも規格上無理なのね
ありがとう

912:デフォルトの名無しさん
12/04/21 16:18:52.52
テンプレートクラスのメンバ関数を、
boost::threadとboost::bindで呼び出して、別スレッドで動かしたいのですが
うまくいきません。ご教授願います。

template<class T>
class TestClass : public T
{
public:
TestClass(void) : T() {}
};

class TestBase
{
public:
void print(TCHAR *str){ cout << str << endl; };
};

typedef TestClass<TestBase> MyTestClass;

int _tmain(int argc, _TCHAR* argv[])
{
TCHAR *char str = _T("test");
MyTestClass myTestClass;
myTestClass.print(str); // 正常に動作

boost::thread myThread(boost::bind(&MyTestClass::print,str)); // ←コンパイルエラー
// c:\Program Files\boost\boost_1_47\boost\bind\mem_fn.hpp(333): error C2296: '->*' : 無効な左オペランドです。

}

913:デフォルトの名無しさん
12/04/21 17:52:34.92
>>912
boost::bindでクラスのメンバ関数ポインタを拘束した場合、第一引数はそのクラスのインスタンス(かインスタンスのポインタとか)になる
boost::bind(&MyTestClass::print, myTestClass, str)

914:デフォルトの名無しさん
12/04/21 18:08:58.52
>>913
ありがとうございます。無事にコンパイルが通りました。

915:デフォルトの名無しさん
12/04/21 19:19:10.20
boost::threadを使って、メンバ関数ではなくて、
クラスそのものを別スレッドで動かしたい場合は、どのように指定すればよいでしょうか?


916:915
12/04/21 20:04:05.95
boost::threadに渡せるのは関数ポインタだけなのかな?
boost::threadにクラスのコンストラクタを渡せば、そのクラスは別スレッドで動いてくれるのかと思ったけど
勘違いでしょうか?

917:デフォルトの名無しさん
12/04/21 20:54:52.22
クラスが動くってなんだ?
・・・って関数オブジェクトのことか?
関数オブジェクトのインスタンスを渡せばそのoperator()を別スレッドで実行させることはできる

918:デフォルトの名無しさん
12/04/21 21:32:08.83
>>916
具体的にどんなコードを書きたいのかここに出したほうが良いと思う。


919:915
12/04/21 21:36:19.05
ウインドウクラスをクラス化したので、
そのクラスを別スレッドにして、プロシージャなどの処理をしたかったんです。

とりあえず、グローバル関数作って、その中でクラスのインスタンスを作って、
boost::threadでそのグローバル関数を呼び出す形にしてみました。
いちいち関数を作るのも面倒なので、無名関数でやってみようかな。
無名関数使ったことないけど。

920:デフォルトの名無しさん
12/04/22 02:06:07.47
JavaやFlashで使われている、イベント/リスナーをC++で実現したいのですが、
boostを使ってできますでしょうか?

921:デフォルトの名無しさん
12/04/22 02:13:52.12
>>920
イベントはシステム側の要求でとある時に「この処理をどうします?」ってプログラマに聞くことなのでそれは可能。
で、リスナは結局デリゲートかなんかに処理をキックする機構なので、
例えばバインドなどでインスタンス関数をイベントに渡したりしたとして、そのインスタンスの寿命がなくなって無効になるタイミングをコントロール出来れば可能だろう。

と、言うわけでできなくは無いけど、GC無いからそこをどうにかしないと難しいと思う。

922:デフォルトの名無しさん
12/04/25 18:39:55.58
boost::graphについて質問です。
例えば、RPGゲームのマップ移動の最短経路を求めたいとします。
ただしマップを通過できるかどうかは条件があって、
・一定のキャラクターレベルを超えていないと通れない
・特定のアイテムを所有していないと通れない
などの条件があります。

私の考えたチープなやり方では、propertyでマップノードごとにRequireLevel、RequireItems
などを持たせて、
レベルによってグラフノードの書き換えをする関数、
DisableGraphByLevel(graph,characterInfo);
アイテムの有無によってグラフノードの書き換えをする関数、
DisableGraphByItem(graph,characterInfo);
などを処理してから、グラフに対して最短経路アルゴリズムを実行するという形です。

ただ、これだと処理後に毎回グラフを元に戻さないといけないし、
条件がより複雑なものが追加されるとこの形では対応できません。
それに第一、スマートではありません。
boostっぽく処理するにはどのように設計すればよろしいでしょうか?

923:やんやん ◆yanyan72E.
12/04/26 02:13:10.40
URLリンク(www.boost.org)
これの、distance_mapとか、distance_compareとかdistance_combineとかを
うまく定義すれば、グラフを書き換えなくても望みの動作をさせられるんでない?

924:922
12/04/27 14:45:37.73
>>923
ありがとうございます。参考にして見ます。

boostを使うだけでなく、boostの中身を理解して、自分でアロケーターだとか
イテレーターとか作ってみたいと思っているのですが、
やんやんさんのように高度に詳しくなるには、どういった書籍やサイトがお勧めでしょうか?
よろしければ教えてください。

925:デフォルトの名無しさん
12/04/27 18:41:03.11
document嫁

926:デフォルトの名無しさん
12/04/27 22:27:30.41
>>905
if (auto i = test() && i.get() != -1) {

auto i = test() && i.get() != -1;

auto n = test() && i.get() != -1;
auto i = n;

多少構文をばらしてみれば無理なの解るだろ

927:デフォルトの名無しさん
12/04/27 22:29:18.96
>>920
boost::functionとboost::bindと、なんかブロードキャストするクラスか
なんかがあったから、それ組み合わせりゃ楽にできるよ

928:デフォルトの名無しさん
12/04/27 22:43:36.06
>>924
興味があるところから入っていって、もっと知りたいと思ったら勝手に詳しくなるもの

929:デフォルトの名無しさん
12/04/27 23:47:34.23
>>920
boost::signals2はどうだろ

930:デフォルトの名無しさん
12/05/20 00:07:51.46
<boost/thread.hpp>をインクルードすると下記のエラーが出ます。
どうすればいいでしょうか?
開発環境はVC++ 2008/2010 WinXPです
ソースコードは
URLリンク(metalphaeton.blogspot.jp)
ここにあるものをそのまま使いました

1>c:\program files\boost\boost_1_47\boost\thread\win32\basic_timed_mutex.hpp(160) : warning C4793: boost::detail::basic_timed_mutex::unlock': ネイティブ関数としてコンパイルされました:
1> マネージ コードでサポートされていない組み込み型が見つかりました
1>c:\program files\boost\boost_1_47\boost\thread\win32\thread_primitives.hpp(314) : warning C4793: boost::detail::win32::interlocked_bit_test_and_set': ネイティブ関数としてコンパイルされました:
1> マネージ コードでサポートされていない組み込み型が見つかりました
1>main.obj : warning LNK4248: 未解決の typeref トークン (0100001F) ('boost.detail.win32._SECURITY_ATTRIBUTES') です。イメージを実行できません。

931:デフォルトの名無しさん
12/05/20 00:31:14.34
>>930
本当にC++ですか?

932:デフォルトの名無しさん
12/05/20 07:07:29.09
>>930
C++/CLIはC++じゃありません

933:デフォルトの名無しさん
12/05/21 12:40:42.28
C++/CLIではthreadはうまく動かない

昔いろいろやってコンパイルだけはできるようになったけど、結局動くことはなかった

934:デフォルトの名無しさん
12/05/21 13:07:13.78
C++/CLIはスレッド出来る。.NETとおなじ機能。
C#でも不可能と言うことになる。

935:デフォルトの名無しさん
12/05/21 15:37:34.03
.NETのVMのスレッド用API機能とWin32のスレッド用API
混在してもまともに動く気がしない

936:デフォルトの名無しさん
12/05/21 15:43:05.54
>>934
933の言っているのはboost threadの話。
boostスレだからboostは省いたんだろう。

937:デフォルトの名無しさん
12/05/25 18:04:12.87
spirit::qiで質問なんですが、Attributeを捨てることって出来ないんでしょうか?
stringを返すruleを使うと、一番上までstringを返さないと存在しないAttribute(string)にアクセスしようとして
不正落ちしてしまいます。
パース中に使用し終わって、解析後にまで残す必要ないものなので捨てたいんですが・・・

あとついでに
>>757
URLリンク(www.boost.org)
このディレクティブを使えばiterator_rangeを受け取れるようです

938:デフォルトの名無しさん
12/06/03 09:10:19.76
VisualStudio 2010 でboost::filesystem::directory_iterator の leaf() を使いたいんですが
Version 1.36 では使えません、どのバージョンなら使えますか。
もしかして、まだ、未対応ですか?

939:デフォルトの名無しさん
12/06/03 09:14:06.80
2年前に1.42で使ってたきがした。
少なくてもその辺以降なら使えるんじゃないだろうか。

後は詳しい人よろしく

940:デフォルトの名無しさん
12/06/03 09:26:54.17
leafって名前変わらなかったっけ?


941:デフォルトの名無しさん
12/06/03 10:10:51.40
>>938 です
thx です。
ごめんなさい、バージョンを間違えていました。
boost_1_46_1 でした。が、leaf() って使えないんですね?

<boost/filesystem/fstream.hpp> を調べると
#if BOOST_FILESYSTEM_VERSION == 2
# include <boost/filesystem/v2/fstream.hpp>

# else
Visual Studio 2010 ではundef になっています?
leaf() ってboost/filesystem/v2/fstream.hpp に入っているようなので
どうしたら使えますか?

942:デフォルトの名無しさん
12/06/03 10:26:23.13
自己解決しました
マクロできってやるだけで、V2使えました。

943:デフォルトの名無しさん
12/06/11 18:33:25.03
leafはpathに名前変わった
ってもう見てないよね

944:デフォルトの名無しさん
12/06/11 23:13:13.00
path().filename() だろ

945:デフォルトの名無しさん
12/06/14 00:15:07.24
boost.intrusive

でコンテナに同じ要素を2つ以上登録するのってできないの?
lets boostの例で同じ要素追加しようとしたらエラーになった

lst.push_back(*pa);
lst.push_back(b);
lst.push_back(c);
lst.push_back(*pa); ここでおかしくなる

946:デフォルトの名無しさん
12/06/14 11:28:56.17
auto d = *pa;
lst.push_back(d);

しよう

947:デフォルトの名無しさん
12/06/14 11:38:00.10
>>945
できない。仕組み考えればわかるだろ
class hoge
{
hoge *prev;
hoge *next;
int value;
}
みたいな構造でprevやnextに自分自身のポインタを入れてリンクの終端を探して探索すれば無限ループになる

948:デフォルトの名無しさん
12/06/14 21:50:25.15
boost::interprocess::shared_ptrってプロセス間通信用の名前空間に入ってるけど、
DLLの入出力なんかに使ったら、常にexeとdllで同じバージョンに保っとかないと
クラッシュするよね。なんで:interprocessの中に入ってんの?

949:デフォルトの名無しさん
12/06/14 23:31:39.75
>>948

それをいうならshared_ptrに限らず異なる領域にあるモジュール間の通信に使うものは
双方のモジュールで互換性のあるものを使わないと問題がでるけど。
(必ずしも同じバージョンの同じライブラリを使う必要はない。そのほうが単純に楽で確実性が高いだけ)

それとBoost.'Interprocess'は名前どおりのプロセス間通信用に限定されたものでなくスレッド間通信用のライブラリでもある。

950:デフォルトの名無しさん
12/06/15 22:18:05.21
>>949
やっぱダメなんやね。
外から見るとテンプレートで型安全。
内部ではvoid* で保持。
実装ははpimplでDLLに配置ってな感じで
自前でスマポ作らないと安全な仕様は無理か。


951:デフォルトの名無しさん
12/06/15 22:45:31.07
両方自前ならknown/rquest versionのやり取りするだけじゃん?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch