boostはじめました → たすけてくださいorz
この切羽詰った時期に決まったこと
2人で書くはずだった仕様はのやさんに丸投げ
2人で実装するはずだったコードはのやさんに丸投げ
ちゃんと特許は出す
マジカヨ! って思う一方でキタコレ!って感じですね。
折角コーディング規約とか規定しまくったのに、全部意味なくなったのはあまりにプギャーですが、どうせ捨てられるコード&動きさえすればいいとなるとある意味気が楽です。
今回手を出したものリスト
- lexical_cast
- boost.Thread
lexical_cast
これまでは
#include <sstream> #include <string> const char* func(int hoge){ std::stringstream ss; ss << "hogehoge" << hoge; return ss.str().c_str(); }
なんて書いていたのが
#include <boost/lexical_cast.hpp> #include <string> const std::string func(int hoge){ return "hogehoge" + boost::lexical_cast<std::string>(hoge); }
と返せるようになったのでご満悦。
実際はstringstreamをwrapしているだけのようですがw
でもboost::lexical_cast
namespace noya{
toString(
ここで止まる。 引数どうやって取ればいいんだ?
とりあえずboostのヘッダファイルを見てみるも、Source&を引数に取るとか書いてあるだけでよくわかんない。 色々template使ってるみたいで、templateをgenericsもどきとしか解釈していない私の限界を悟りましたorz
解法
#define toString(x) boost::lexical_cast<std::string>(x)
明らかにダメだろ、この実装… 誰か助けて><
boost.thread
とりあえず作ってもらったpthreadの謎ライブラリは窓から投げ捨てて、boost.threadに手を出しました。
とはいえ私、スレッドプログラミングははじめて。というか、スレッドってぶっちゃけ何?みたいな感じ。
大学の授業をサボったのがよくなかった。とりあえず今日1日でJavaのThreadと比較しながら大まかに理解。
mutexがイマイチ分かったような分からなかったところとboost.threadでsyncronizeさせるやり方が分からないのが問題だけど、まぁ今回は複数のスレッドが1つの共有資産を書き換えることがないのでいいかなと。
スレッドが固定数沸くプログラミングはなんとかマスターできたんだけど、不定数沸くようなプログラムはどうやって書けばいいんだろう
#include <vector> #include <boost/thread.hpp> vector<boost::thread> threadVector; while(ユーザが止めるまで){ if(スレッド作れ){ boost::thread t(&func); threadVector.push_back(t); } } vector<boost::thread>::iterator it = threadVector.begin(); while(it!=threadVector.end()){ it->join(); }
こんな感じ?なんかcreate_threadみたいな関数とかないのかなぁ。
boostとか詳しい人、色々教えてください><