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といちいち撃つのが面倒なので、toString()みたいな関数でwrapすることに

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とか詳しい人、色々教えてください><