Boostを語れゴラァ part5
■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS
2007/10/18(木) 08:09:35過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/
■関連サイト■
Boost C++ Libraries
http://www.boost.org/
Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/
Let's Boost
http://www.kmonos.net/alang/boost/
boost info
http://shinh.skr.jp/boost/
0238デフォルトの名無しさん
2007/12/25(火) 20:24:53my_device::readの引数nが4096でも戻り値で1を返しとけばいいんじゃないかな?
でもmy_device::readが一度に1しか読めない仕様(234より)だから
ss.read( buf, sizeof( buf ) )ってやるとsizeof(buf)回呼び出されて効率悪いけど・・・
0239デフォルトの名無しさん
2007/12/25(火) 20:39:55多分大丈夫だと思うんだけどmy_device::readの引数nがインデックスではないよ。サイズだよ?
例えばn==4096の時
4096番目からreadしてsに入れろ
でなく
わたくしめの方で確保させていただきましたsのサイズは4096です。
4096ぴっちり埋めて頂かなくても結構ですが埋めて頂きましたサイズを戻り値としてお返しください
だよ?
インデックス指定はseekで行われるよ
see also
ttp://www.boost.org/libs/iostreams/doc/tutorial/container_device.html
0240デフォルトの名無しさん
2007/12/25(火) 21:25:59ありがとうございます。
my_device::read()の引数nがインデックスではないのは理解しているつもりです。
作っているmy_deviceがrs232cの通信インターフェースなので、
stream<my_device> ss;
ss.get();
のときに、タイムアウトするまで制御が戻ってこないと不都合があったのです。
※1文字受信していても、n==4096なので、ReadFileしたときに制御が戻ってこない
なので、
ss.read( buf, sizeof( buf ) );
のときにはsizeof( buf )分だけ、
ss.get()
のときには1文字分だけ読み込む処理がしたかったのです。
iostream拡張は今までやったことがなく、stream_bufのバッファリングの仕組みは
まだよくわかっていなのですが、仕様っぽい気がしてきました。
他の方法で解決できないか試してみます。
0241デフォルトの名無しさん
2007/12/25(火) 21:58:08レスありがとうございます。
mplやconsリストというのを未だ知らないので
まずはこれを調べて見ます。
0242234
2007/12/26(水) 00:00:09my_device::read()内で、受信バッファのデータ数を調べ、
その分だけReadFileすることで解決しました。
>>235, >>238-239
助言ありがとうございました。
0243デフォルトの名無しさん
2007/12/26(水) 00:01:29template <typename Args>
struct sig
{
typedef ?? type;
};
int operator()(int x) const;
double operator()(double) const;
void operator()(int x, int y) const;
};
上のようなファンクタの場合、型の違いによって、
typeを振り分けるにはcons listから型を抽出して
is_same<>で型を判定するという方法で可能でしょうか?
sigの部分的特殊化の方法か何かで
Args::inherited が cons<A, double>
を表すように仕組んで、
boost::tuples::element<1, Args>::type
とcons<A, double>のdoubleの比較一致を
試すというようなことができれば実現できるのかなと
思っているのですが。
0244デフォルトの名無しさん
2007/12/26(水) 05:38:45ごめん、上でArgs::inheritedとか書いたけど無視してくれ
Argsがタプルならこの方法でconsリストを取り出せるけど、Argsとして渡されるのは最初からconsリストだった。
で、そのファンクタの場合も、boost::tuples::elementとis_sameとif_cでちまちまテストしてもいいし、
部分特殊化で一気にディスパッチしてもいい。
後者なら、メンバテンプレートは特殊化できないので、こんな感じで。
namespace detail {
namespace bt = boost::tuples;
template <typename Args> struct A_sig;
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<int, bt::null_type> > > { typedef int type; };
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<double, bt::null_type> > > { typedef double type; };
template <typename Fun>
struct A_sig<bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type> > > > { typedef void type; };
}
struct A {
template <typename Args>
struct sig { typedef typename detail::A_sig<Args>::type type; };
/* 以下略 */
0245デフォルトの名無しさん
2007/12/26(水) 09:10:49boost::archive::binary_oarchive bo(oss) として
bo にいろんなクラスを流し込んだ挙句,
oss.str() で std::string を取り出して
プログラム内でやり取りすることはできますか?
つまり,std::ostringstream にバイナリを
流し込んでいいのか?ということなんですが・・・
(その点に絞ると Boost スレとはスレ違いですみません)
0246デフォルトの名無しさん
2007/12/26(水) 10:04:57Boehm GC に似たやつとか
0247デフォルトの名無しさん
2007/12/26(水) 10:08:510248デフォルトの名無しさん
2007/12/26(水) 12:23:05今いくつか記事読んだ.
ライブラリとしてではなくて完全に言語使用に取り込もうとしているんだね.
C++/CLI の gcnew のように新しく「ハンドル」を持ち込むわけではないんだな.
ということは結局実装は Boehm GC のような conservative GC だってことだね.
0249デフォルトの名無しさん
2007/12/26(水) 16:18:56レスありがとうございます。
アイデアよくわかりました。この考えに従って
自作プログラムをコンパイルしたところ、引数が一つのもの
については成功し実行もできました。
//aはint配列あるいはdouble配列
for_each(a, a + 3, bl::bind(A(), bl::_1)); // OK
ただ、以下はコンパイルエラーとなりました。
//aはint配列
for_each(a, a + 3, bl::bind(A(), bl::_1, 100)); //コンパイルNG
引数が二つ以上のものが実体化されるときにエラーとなるようです。
”認識できない型”と怒られているので、おそらく
bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type>が
実体化できない原因かなと思ってるのですが定かではありません。
consの形式自体はヘッドとテイルの2引数を与えていて、bl::null_type
も空の構造体として存在していましたので、型認識に問題は
なさそうなんですが、null_typeが連続して出てくるた
長い行が報告されます。(VC++ 2005 Eepress Edition)
boost::tuples::cons<const A,boost::tuples::cons<int,boost::tuples::cons<const
int,boost::tuples::detail::map_tuple_to_cons<boost::tuples::null_type,bo
ost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type
,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_t
ype,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::nul
l_type>::type>>>
0250デフォルトの名無しさん
2007/12/26(水) 16:30:41// The empty tuple is a null_type
template <>
struct map_tuple_to_cons<null_type, null_type, null_type, null_type,
null_type, null_type, null_type, null_type, null_type, null_type>
{
typedef null_type type;
};
ソースを見る限りではnull_typeと正しく判断されてもよいと
思うのですが。
0251デフォルトの名無しさん
2007/12/26(水) 17:33:15第二引数の型がintじゃなくてconst intとして与えられてるから特殊化にマッチしないみたいだ。
ディスパッチの前にremove_cvをかければ良いんだけど、
consリストはMPLシーケンスの要件を満たしていないみたいでtransformが使えない。
仕方ないから自分で再帰してみたら動いた。
template <typename List> struct list_remove_cv;
template <>
struct list_remove_cv<bt::null_type> { typedef bt::null_type type; };
template <typename Head, typename Tail>
struct list_remove_cv<bt::cons<Head, Tail> >
{
typedef bt::cons<
typename boost::remove_cv<Head>::type,
typename list_remove_cv<Tail>::type
> type;
};
これをやるくらいならelementとif_cで判別した方が楽かもしれない。
0252デフォルトの名無しさん
2007/12/26(水) 17:57:560253デフォルトの名無しさん
2007/12/26(水) 18:25:33毎度ありがとうございます。
難しいですね。。
自分ではまだそのようなコードは書けないです。
ただ、可能だということが分かっただけで
十分助かりました。引数型についてはelementで
引数の数についてはboost::tuples::lengthを使って
うまく組み合わせてみます。
0254デフォルトの名無しさん
2007/12/26(水) 23:56:46ランタイムのリンク方法はどのようになるのでしょうか?
/MT & /MTd か /MD & /MDd のいずれなのでしょうか?
0255デフォルトの名無しさん
2007/12/27(木) 00:01:26オートリンクが、そのときの設定に合わせて自動でやってくれるので、
何もしなくてよい。
0256デフォルトの名無しさん
2007/12/27(木) 00:18:37/MLd = -sgd
/MD = -mt-s
/MDd = -mt-s-gd
/MT = -mt
/MTd = -mt-gd
が全部用意されるのか・・・
/ML と /MLd は vc8 や vc9 ではすでにサポートされていないようなので
/MT と /MTd と同じものがビルドされているみたいだね.
0257デフォルトの名無しさん
2007/12/27(木) 10:18:22libboost_date_time-vc90-mt-gd-1_35.lib
libboost_date_time-vc90-mt-gd.lib
みたいにバージョンが入ったものとそうでないものが
ビルドされるけど、どちらか一方だけがリンカの
パスに見つかれば問題ないの?
それもオートリンクでどちらかが先に見つかって解決?
0258デフォルトの名無しさん
2007/12/27(木) 10:39:450259245
2007/12/27(木) 13:12:05持ち歩けることを確認、って当たり前かもしれないけど、
ちょっと感動。
make_nvp で作った std::pair をやり取りする
連想記憶(ってただの multimap だけど)を
作って便利に使ってます。
しかし boost::archive のフォーマットが変わるかもしれないので
ちゃんと serialize で version をチェックしなきゃなぁ、
バイナリだし何が起こるかわからない。
0260245
2007/12/28(金) 14:46:50制御文字を含むような std::string を boost::archive::xml_oarchive に
流し込むと XML 文書がぶっ壊れる.うむ〜.
0261デフォルトの名無しさん
2007/12/28(金) 22:24:08記念に糞patch晒し。
phoenixでstd::mapにoperator[]が使えなくて、渋々phoenix::binary_operatorを特殊化したら
boost::graph内(boost/graph/detail/read_graphviz_spirit.hpp)でも同じことやってるの見つけて
ブチ切れ気味にspecializations for stl iterators and containersとやらを修正してみた。
$ diff -u special_ops.hpp.orig special_ops.hpp
--- special_ops.hpp.orig 2007-12-25 10:49:20.000000000 +0900
+++ special_ops.hpp 2007-12-25 22:08:29.671875000 +0900
@@ -21,6 +21,8 @@
///////////////////////////////////////////////////////////////////////////////
#include <boost/spirit/phoenix/operators.hpp>
#include <iosfwd>
+#include <boost/typeof/typeof.hpp>
+#include <boost/utility/result_of.hpp>
///////////////////////////////////////////////////////////////////////////////
#if defined(_STLPORT_VERSION) && defined(__STL_USE_OWN_NAMESPACE)
@@ -320,7 +322,8 @@
template <typename T0, typename T1>
struct binary_operator<index_op, T0, T1>
{
- typedef typename T0::reference result_type;
+ typedef BOOST_TYPEOF_TPL(&T0::operator[]) index_op_t;
+ typedef typename boost::result_of<index_op_t(T1)>::type result_type;
static result_type eval(T0& container, T1 const& index)
{ return container[index]; }
};
0262デフォルトの名無しさん
2007/12/29(土) 13:58:37嬉しいのは分かるけど自意識過剰なの?
0263デフォルトの名無しさん
2007/12/29(土) 14:07:18何いちいち反応しているの?
興味がないなら無視すればいいだけだろ
#include <boost/current_function.hpp>
により Visual C++ では
#define BOOST_CURRENT_FUNCTION __FUNCSIG__
にされてしまうのはなぜ?
Visual C++ なら __FUNCTION__ があるので
#define BOOST_CURRENT_FUNCTION __FUNCTION__
にならないといけないはずなのに
0264デフォルトの名無しさん
2007/12/29(土) 14:39:12いやいや興味はあるよ。
“自意識過剰なのか”という点についてね。
0265デフォルトの名無しさん
2007/12/29(土) 15:22:05void bar(){}
boost::function<void(void)> f1 = foo;
boost::function<void(void)> f2 = bar;
assert(!(f1 == f2))
なぜこの比較が通らないんでしょうか?
assert(f1 == foo) なら通るんですが・・
boost::function のインスタンス同士の
比較はできないのでしょうか?
単純に関数ポインタの比較のようなことをしてくれればいいのですが.
0266265
2007/12/29(土) 15:52:01Why can't I compare boost::function objects with operator== or operator!=?
http://www.boost.org/doc/html/function/faq.html#id1215129
そのまんまのことが書いてありました.
死ね,俺.
没年2007.
0267デフォルトの名無しさん
2007/12/29(土) 16:01:08スレ違い
0268デフォルトの名無しさん
2007/12/31(月) 12:16:54気のせいですよね?
0269デフォルトの名無しさん
2007/12/31(月) 15:38:12不思議ではないだろ
0270デフォルトの名無しさん
2007/12/31(月) 23:49:00ライブラリが用意されていますよね、普通。たとえば bjam
でビルドすると両方のライブラリが作られるし、
Debian GNU/Linux や Ubuntu で boost-dbg を入れると
デバッグ用のライブラリが /usr/lib 以下に入り、
通常バージョンのライブラリと同居します。
で、ふと思ったのですが、Linux の一般的なディストリビューション
(RHEL や Debian) で libhoge, libhoge-dev を入れると
/usr/lib 以下に入る libhoge.a や libhoge.so は一種類だけで
特にデバッグバージョンと通常バージョンという区別はありません。
Linux のディストリビューションではパッケージングの際に
デバッグ情報をつけるか否か、デバッガで扱えるように
最適化をオフにするか否か、などについて取り決めがあるのでしょうか?
0271デフォルトの名無しさん
2008/01/02(水) 12:19:06リリースされるのかな?
0272デフォルトの名無しさん
2008/01/02(水) 16:28:40jpegとpngの読み込みを正式にコミットして、
pngも通過色とかまともに対応して、
スケーリングなども用意して。
0273デフォルトの名無しさん
2008/01/02(水) 16:29:410274デフォルトの名無しさん
2008/01/03(木) 02:20:39struct my_device
{
typedef char char_type;
typedef bidirectional_device_tag category;
streamsize read(char_type *s, streamsize n);
streamsize write(const char_type *s, streamsize n);
};
int main()
{
my_device device;
stream<my_device> s(device);
char one = 'b', two = 0;
s.put(one);
s.get(two);
}
my_device::write
my_device::read
の順番で呼ばれると思ったのですが、なぜかmy_device::readのほうしか呼ばれません。
なぜこのようになるのかご存じの方がいらっしゃいましたら教えてください。
0275デフォルトの名無しさん
2008/01/03(木) 07:35:44BGL ではグラフの頂点や辺にプロパティを設定して
値を持たせることができますが(たとえば「色」とか),
ある値をプロパティとして持つ頂点や辺を高速に
列挙させることはできるのでしょうか?
頂点イテレータなどで全探索して列挙するのはつらいので,
プロパティマップを boost::multi_map::multi_map_container
などをつかってキーでも値でもインデックスされているような
コンテナでプロパティを保持できればと思っているのですが.
外部プロパティとして持てばよいのではないかとも思うのですが,
たとえば boost::print_graph は vertex_index_t を内部プロパティ
として持っていることを前提に作られているので,
内部プロパティの持ち方を指定してうまくやれればいいと思っています.
0276デフォルトの名無しさん
2008/01/03(木) 08:51:59もしあるのだったらboostの方を使いたいです。
int var;
//キャストが必要な長い式
var = (int)(0.123456789 * 9.87654321 / 0.123456789);
//「キャストをする」と表明するだけで
//具体的な型や乱雑な括弧が必要ない
var | mycast = 0.123456789 * 9.87654321 / 0.123456789;
0277デフォルトの名無しさん
2008/01/03(木) 09:00:120278デフォルトの名無しさん
2008/01/03(木) 09:16:53operator =で右辺を代入してるだけ。
0279デフォルトの名無しさん
2008/01/03(木) 09:19:180280デフォルトの名無しさん
2008/01/03(木) 09:28:450281デフォルトの名無しさん
2008/01/03(木) 09:35:05初期化式の型から変数の型を判断するやつだね。
俺が書いたのは単に代入用だけだよ。
0282デフォルトの名無しさん
2008/01/03(木) 09:36:58class auto_cast_wrarapper {
T& obj_;
public:
auto_cast_wrarapper(T& obj)
: obj_(obj)
{}
template<typename U>
T& operator=(U const& obj) {
return obj_ = static_cast<T>(obj);
}
};
class auto_cast {};
template<typename T>
auto_cast_wrarapper<T> operator|(T const& lhs, auto_cast rhs) {
return auto_cast_wrarapper<T>(lhs);
}
static auto_cast mycast;
こんな感じかな。まあboost::enable_ifとか使ってもうちょっと上手く実装してるとは思うけど。
とりあえずboostに同様のものは無かったと思われ。
0283282
2008/01/03(木) 09:39:57wrapperね。
0284デフォルトの名無しさん
2008/01/03(木) 10:17:300285デフォルトの名無しさん
2008/01/03(木) 10:23:04varがint形とdouble形のコンストラクタと代入演算子を持っていて、
それぞれ意味が違う場合はどうするの?
0286デフォルトの名無しさん
2008/01/03(木) 14:48:380287デフォルトの名無しさん
2008/01/03(木) 18:11:52単にバッファリングされてるだけなんじゃないの?
>Note that the Iostreams library provides buffering by default. Consequently, the stream out must be flushed before
>the characters written are guaranteed to be reflected in the underlying string.
>http://www.boost.org/libs/iostreams/doc/tutorial/container_sink.html
>275
「BGLでは」ではなくて、むしろ「adjacency_list と adjacency_map では」が正しいんじゃないの?
内部プロパティに対するアクセス方法としては、PropertyGraph か MutablePropertyGraph に対応するものしか
用意されてないし、EdgeList とかの持ち方はカスタマイズできるけど内部プロパティの持ち方はカスタマイズできないと思う。
で、内部プロパティと外部プロパティを併用したら駄目なん?
あるいは、いっそのこと、自分で BGL の Concept に沿ったクラスを作っちゃえばいいんじゃないかな?
0288デフォルトの名無しさん
2008/01/03(木) 18:39:49writeの後にflushをしたら期待した動作になりました。
ありがとうございました。
0289デフォルトの名無しさん
2008/01/03(木) 19:17:02そうですね.外部プロパティとの併用にします.
BGL って Graphviz への出力もできるし,
その時の VertexPropertyWriter は
boost::bind や boost::lambda でファンクタ
自在に作れるし,便利ですね.
0290デフォルトの名無しさん
2008/01/04(金) 01:55:41各要素を std::cout に出力したいとき、
boost::bind でうまくファンクタかけないかな?
0291デフォルトの名無しさん
2008/01/04(金) 10:42:430292デフォルトの名無しさん
2008/01/04(金) 10:47:30std::vector<std::string> の参照を受け取ると
その内容を全部ずらずらと書き出すようなファンクタを
コードの途中で必要に応じて作り出せないだろうかということです。
0293デフォルトの名無しさん
2008/01/04(金) 12:16:30void operator()(const std::vector<std::string>& v)
{
std::copy(v.begin(), v.end(), ostream_iterator<std::string>(cout, " "));
}
とかじゃだめなのか?何でboost::bindが必要なんだ?
0294デフォルトの名無しさん
2008/01/04(金) 12:17:28{
std::copy(v.begin(), v.end(), ostream_iterator<std::string>(cout, " "));
}
constつけた。
0295デフォルトの名無しさん
2008/01/07(月) 19:19:40その状態クラスのメンバ変数の値によって、次の状態に遷移するしないを分ける事はできますか?
http://www.kmonos.net/alang/boost/classes/statechart.html
ここのサンプルで例えれば、
「Locked状態はn回Coinイベントを受け取ったらUnlocked状態に遷移」という風にしたいです。
0296デフォルトの名無しさん
2008/01/08(火) 14:27:54boost.pythonをcmake(クロスプラットフォームmake)から使う方法まとめてみました
0297デフォルトの名無しさん
2008/01/09(水) 20:03:20./configureやると
checking whether the Boost::DateTime library is available... yes
checking for main in -lboost_date_time... no
configure: error: Unable to find Boost.DateTime library, currently this is required.
って出て失敗するので,Boostライブラリを手動インストールしたのですが認識してくれません.
# ldconfig -v
で確かに
libboost_date_time-gcc41-mt-1_34_1.so.1.34.1 -> libboost_date_time-gcc41-mt.so
libboost_date_time-gcc41-1_34_1.so.1.34.1 -> libboost_date_time-gcc41.so
と追加されているはずなのですが,configuregが認識していないようです.
これどうやったら直りますか?
ちなみにyumで自動インストールするといけるのですが,自分はboost::filesystemとか使いたいので
bjamつかって自前でビルドしてインストールしました.
0298297
2008/01/09(水) 20:04:41Fedora Core 6でカーネルのバージョンが2.6.18-1.2798.fc6です
宜しくお願いいたします.
0299デフォルトの名無しさん
2008/01/09(水) 20:07:30に
boost.conf
とかいう名前のファイル作ってboostインストールしたパスを書く
/usr/local/boost/lib
とか
それから
#ldconfig
0300デフォルトの名無しさん
2008/01/09(水) 20:07:570301デフォルトの名無しさん
2008/01/09(水) 20:22:26やってみましたが駄目でした.
ldconfig -v
/usr/local/lib:
(途中省略)
libboost_date_time-gcc41-mt-1_34_1.so.1.34.1 -> libboost_date_time-gcc41-mt.so
libboost_date_time-gcc41-1_34_1.so.1.34.1 -> libboost_date_time-gcc41.so
となっているので,ライブラリ自体は認識していると思います.
今気づいたのですが
checking whether the Boost::DateTime library is available... yes
ということはライブラリ自体は認識しているようですね...
checking for main in -lboost_date_time... no
と成っています-lboost_date_timeがおかしいということでしょうか...
>>300
yum install boostってやるときちんと./configureできてビルドできるのですが,今回は
boost::filesystemとか使いたいのでbjamつかって自前でビルドしてインストールしました.
0302デフォルトの名無しさん
2008/01/09(水) 20:47:12エラーメッセージでググると確かにdevel 入れろってアドバイスされてるね
sudo apt-get install libboost-dev libboost-date-time-dev
libboost-filesystem-dev libboost-serialization-dev libboost-thread-dev
libboost-regex-dev libboost-program-options-dev
fedoraは apt-get を yum install にすればいいのかな
0303デフォルトの名無しさん
2008/01/13(日) 14:52:55会社の先輩が boost、boost と boost 自慢して煩いのですが。
0304デフォルトの名無しさん
2008/01/13(日) 15:08:39使わなきゃ損。
使えない奴は低能。
0305デフォルトの名無しさん
2008/01/13(日) 15:15:240306デフォルトの名無しさん
2008/01/13(日) 15:17:440307デフォルトの名無しさん
2008/01/13(日) 15:23:500308デフォルトの名無しさん
2008/01/13(日) 15:25:290309デフォルトの名無しさん
2008/01/13(日) 15:59:13Lets boostで書いてあったのですが、具体的にどうやれば
良いのでしょうか?
0310デフォルトの名無しさん
2008/01/13(日) 16:35:300311デフォルトの名無しさん
2008/01/13(日) 16:39:01絶対パスである必要はあるの?
0312デフォルトの名無しさん
2008/01/13(日) 16:41:410313デフォルトの名無しさん
2008/01/13(日) 16:45:07Letsだと変換が用意されてるように書かれてましたが、
自前変換しかないんですかねぇ。
0314デフォルトの名無しさん
2008/01/13(日) 16:48:12../ の場合、何も付いてない場合、ドライブレターの場合(最初から絶対パス)、
さらに/が\な場合など、かなり面倒な・・・
0315デフォルトの名無しさん
2008/01/13(日) 17:05:29とか、
system_complete()
で簡単に変換できると思うが。
0316デフォルトの名無しさん
2008/01/13(日) 17:16:180317デフォルトの名無しさん
2008/01/13(日) 17:20:34まさにsoreda!
感謝感謝
0318デフォルトの名無しさん
2008/01/14(月) 00:43:06だってC++の標準ライブラリが貧弱すぎて話にならないから。
簡単なところでは正規表現とかshared_ptrとか。
bindとmem_fnもC++標準のよりBoostのほうが使いやすい。
0319デフォルトの名無しさん
2008/01/14(月) 01:25:06どうでもよくね?
プログラム全体から見ると、Boostで楽になる部分なんて 1% 以下でしょ。
0320デフォルトの名無しさん
2008/01/14(月) 01:28:180321デフォルトの名無しさん
2008/01/14(月) 01:28:250322デフォルトの名無しさん
2008/01/14(月) 01:34:13あれって、参照カウンタで管理してるんでしょ?
循環参照したらオワタになるので、素人に使わすと逆に危ないよ。
そもそも、new するシチュエーションってそうそうあるか?
なるべく new を避けて書くのが C++er の嗜みだとおもうが。
0323デフォルトの名無しさん
2008/01/14(月) 01:35:58デザインパターンの半分は使えなくなるんじゃね。
0324デフォルトの名無しさん
2008/01/14(月) 01:37:00もの足りないと思うひとがBoost使ってることが多いだろうね
数万行のコード書いたら1%ってめっちゃでかいと思うんだ
(実際は1%どころじゃないけど)
0325デフォルトの名無しさん
2008/01/14(月) 01:40:10まあ素人に使わせるとそうなることはあるかもしれんな。
0326デフォルトの名無しさん
2008/01/14(月) 01:44:03殆どのインスタンスは、自分の親クラスのメンバ変数として一緒に確保されるから、
大きな new delete が時たまあるだけってのが普通じゃない?
細かい単位で new delete 繰り返すなんてのは、C++ には似合わないと思うが。
そういうふうに書いてくれ、と頼まれたなら仕方ないが。
0327デフォルトの名無しさん
2008/01/14(月) 01:50:130328デフォルトの名無しさん
2008/01/14(月) 01:57:01デバッグだったり、プロジェクトの管理だったりだよね。
Boostってあんまどうでもよくない ?
0329デフォルトの名無しさん
2008/01/14(月) 01:59:20weak_ptr
0330デフォルトの名無しさん
2008/01/14(月) 02:02:09よくない
プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
は当然あるだろ
だったらコード量が減って、難しい処理を(Boost使わないよりは)簡単に実装できるなら使ったほうがいいんじゃない
0331デフォルトの名無しさん
2008/01/14(月) 02:09:09>プログラミングで難しいのには「大量のコードを書くこと」や「難しい処理を実装すること」
>は当然あるだろ
えーーーー
無いなぁ。難しい処理ってのは、確かに難しいんだけど、
Boost 使ったぐらいでどうこうなるレベルの処理を、普通は難しいとは言わないよなぁ。
Boostって、「うっかりミスが防げるかもね!!」 レベルの話でしょ。
0332デフォルトの名無しさん
2008/01/14(月) 02:16:40しかし、難しい処理の実装は、Boostを使ってもやっぱり難しいよ。
0333デフォルトの名無しさん
2008/01/14(月) 02:28:31>>332が非常に簡潔な答えをくれた。
「面倒くさい」
0334デフォルトの名無しさん
2008/01/14(月) 02:59:04×どうしても使わないと駄目
○メリット大きい・デメリットやリスクが少ないなら使う
まあBoostに限らないけど。
使いこなせる人間がわずかしかいないプロジェクトに導入したりするのはまずいかと。
新しいものを覚えるコストはゼロじゃないよ。
(誰か1人が使うだけで話が完結するならいいかもしれんが)
まあ、各人がBoostを使えた方が開発効率がよいとは思う。
気長に導入しようって話ならいいんでは?
0335デフォルトの名無しさん
2008/01/14(月) 03:31:240336デフォルトの名無しさん
2008/01/14(月) 03:43:360337デフォルトの名無しさん
2008/01/14(月) 04:41:24でも、Boostって何かに特化しているってわけでもないんだよな。
だから使ったところで丸投げできないし、結局あんまブーストしない。
■ このスレッドは過去ログ倉庫に格納されています