[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/26 12:43 / Filesize : 65 KB / Number-of Response : 227
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Boostを語れゴラァ part5



1 名前:BOOTS [2007/10/18(木) 08:09:35 ]
語って.はぁと part boost::mpl::int_<5>

過去スレ
part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■
Boost C++ Libraries
www.boost.org/

Boost 翻訳プロジェクト
boost.cppll.jp/HEAD/

Let's Boost
www.kmonos.net/alang/boost/

boost info
shinh.skr.jp/boost/

138 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 08:20:28 ]
>>137
それはもしかしてプリプロセッサのバグじゃないか?
使ってるプリプロセッサ何?

139 名前:132 mailto:sage [2007/12/09(日) 08:59:35 ]
>>138
VC++ Express 2005 です。
新規プロジェクト作り直して丸ごと移したら正常にコンパイル出来ました・・・
何か気持ち悪いけど、どこかプロジェクトの設定が壊れてたのだと思います。
お騒がせしました。

140 名前:132 mailto:sage [2007/12/09(日) 09:49:06 ]
と思ったらまた再発したorz 何だこれ

141 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 10:28:26 ]
2005でboost使うのは辞めてくれ。
stdとtr1だけにしとけ

142 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 10:37:55 ]
>>141
VC++7.1 は対応度高かったと思うけど 2005 だともしかして劣化してる?
2008 beta はどうなんだろ。

143 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 11:51:47 ]
初耳だな

144 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 12:04:45 ]
>>142
2008はもう正式版出ているw

145 名前:デフォルトの名無しさん [2007/12/09(日) 12:56:18 ]
>>141
何の問題もないが.
時々 IntelliSense が黙るだけで.
VC9 ではかなり賢くなってる.
それでも boost::bind つかいまくりで
ファンクタ合成しまくりとかで黙ることもある.

146 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 14:09:37 ]
VC8だとuBLASにlambdaにfunctionにmplまで使ったらclがエラーで落ちたことがあったな。
SP1当てたら大丈夫になったけどさ。



147 名前:デフォルトの名無しさん [2007/12/10(月) 14:24:36 ]
boost::shared_ptr の参照カウンタがゼロになったときに、
delete 以外の解放処理を行わせる方法はありますでしょうか。

extern IMalloc* allocator;
{
boost::shared_ptr<ITEMIDLIST> pidl((ITEMIDLIST*)allocator->Alloc(10));
}
//ここでallocator->Freeを呼ばせたい

148 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 14:36:59 ]
>>147
デリータを指定できるコンストラクタがあるよ。

template <typename U, typename D>
  shared_ptr( U* ptr, D deleter);



149 名前:147 mailto:sage [2007/12/10(月) 15:08:43 ]
おぉぉ、ありがとうございます。
解決しますた。
クラス全体のテンプレート引数 (1個しか無い) にしか目がいってなくて、
コンストラクタのところを見てなかったです。orz

150 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 00:49:05 ]
>>149
焦っている時にありがちな罠だから落ち着いて資料を読めばいいと思うよ。(自分への叱咤でもありorz)


151 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 02:45:26 ]
msvc+stlportの環境下で、Boost Build v2で、boostをインストールした人って
いませんか?

VC++8 + STLport-5.1.4 に boost-1.34.1 を入れようとして、
Boostビルドまでは何とかこぎ着けたのですが(コンパイルエラーなしで)、
いざ、boostを使ったプログラムをメイクしようとすると、

error LNK2019: 未解決の外部シンボル
"bool __cdecl boost::filesystem::native(class stlpd_std::basic_string<char,class stlpd_std::char_traits<char>,class stlpd_std::allocator<char> > const &)"
(?native@filesystem@boost@@YA_NABV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@@Z)
が関数 _main で参照されました。

なんていうリンクエラーが出てしまいます。

152 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 03:53:33 ]
ライブラリをリンクしろ。

153 名前:デフォルトの名無しさん [2007/12/11(火) 08:58:58 ]
環境の判定に BOOST_PLATFORM マクロを使おうと
思ってるんだけど、プリプロセッサって
文字列の比較できないよね?
環境の判定によいアイディアあったら教えてプリーズ。

154 名前:151 mailto:sage [2007/12/11(火) 09:54:39 ]
>>152
[ツール]→[オプション]→[プロジェクトおよびソリューション]→[VC++ディレクトリ]で、
ライブラリファイルのディレクトリとして、
C:\Boost\lib
を追加済みです。

さらに、プロジェクトのプロパティページで、
[構成プロパティ]→[リンカ]→[入力]→[追加の依存ファイル]で、
boost_filesystem-vc80-mt-gdp-1_34_1.lib
を追加してみたのですが、ダメでした。(:_;)

155 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 11:39:13 ]
>>154=151
普通は「追加の依存ファイル」なんて設定しなくても
オートリンクで適切なライブラリをリンクしてくれるはずなんだけどなぁ。
って STLPort 使ってない俺が言っても意味ないよね。

156 名前:151 mailto:sage [2007/12/11(火) 14:38:29 ]
>>155
のはずなんだけど・・・。
v1のときは、普通にリンクできていたので。
なんというv2。

何も情報を出さないのはアレなんで、
ビルドフロー(失敗している奴)をここにまとめておきます。

Visual C++ 8.0 with SP1
STLport-5.1.4
 → C:\STLport-5.1.4 として解凍。
boost-1.34.1
 → C:\boost-1_34_1 として解凍。

OS: Microsoft Windows SP2
CPU: Intel



157 名前:151 mailto:sage [2007/12/11(火) 14:39:01 ]
■STLport

stlport/stl/config/user_config.h の
 #define _STLP_USE_BOOST_SUPPORT 1
を有効にする。

> "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
を実行。

環境変数に、
 STLP_BUILD_BOOST_PATH=C:\boost_1_34_1
を追加。

> cd build\lib
> configure -c msvc8 --use-boost=C:\boost_1_34_1
> nmake /fmsvc.mak install
でSTLPortをビルド。

158 名前:151 mailto:sage [2007/12/11(火) 14:41:47 ]
■boost

stlport.jamファイルの不具合を修正する。
 lists.boost.org/boost-build/2007/08/17123.php参照

user-config.jamファイルを編集する。
 using msvc : 8.0 ;
 using stlport : 5.1.4 : C:/STLport-5.1.4 ;

環境変数を設定する。vsvars32.bat
 @set STLPORT_PATH=C:\STLport-5.1.4
 @set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\S
 TLport-5.1.4\stlport;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\
 Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;C:\Program File
 s\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
 @set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;C:\STLport-
 5.1.4\lib;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\M
 icrosoft Visual Studio 8\VC\PlatformSDK\lib;C:\Program Files\Microsoft Visual
 Studio 8\SDK\v2.0\lib;%LIB%
(実際はそれぞれ1行です)

vsvars32-stlport.batにリネームして保存。

> "C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32-stlport.bat"

ビルド。
> bjam --toolset=msvc stdlib=stlport --without-python install > build.log

build.logを見たら、
 ...updated 5631 targets...
でビルド成功。

159 名前:151 mailto:sage [2007/12/11(火) 14:43:59 ]
■試しに動かしてみる。

stlport、boostともインクルード・ライブラリそれぞれのディレクトリ
を追加。

int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
using namespace boost::filesystem;

boost::filesystem::path outputFilePath( "C:\\hogehoge.txt", native );
boost::filesystem::fstream outputFile( outputFilePath );

//string s;
//double d;
//s = "53.0";
//d = boost::lexical_cast< double >( s );

//cout << "Hello world" << endl;
//outputFile << "Hello world!" << endl;

return 0;
}

でビルド。

すると、>>151のようなエラー。

チラシの裏みたいでごめん。

160 名前:151 mailto:sage [2007/12/11(火) 14:46:34 ]
↑にあるコメント行はゴミです。すまん。削除するのを忘れた。。
ビルドの要らないboostライブラリは普通に動きます。lexical_castとか。

161 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:52:53 ]
multi_index_container.hpp なんてのがあるのか orz
俺の一週間の苦労はなんだったんだ……
お前ら、先に教えてくれよ……

λ....トボトボ

162 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:01:52 ]
>>161
どんまい。。。

163 名前:161 mailto:sage [2007/12/12(水) 08:08:55 ]
さすがにインデックス3つ使って複雑なコンテナ作ると,
Visual C++ 2008 でも IntelliSense が死ぬね.
でも補完機能は IntelliSense がぴか一だと思うんだけど,
それでも追い切れないとは…

164 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 08:14:29 ]
うーむ、2008はそんなにIntelliSenseがいいのか
2005Pro持ってるけどどうしようかなあ…

165 名前:161 mailto:sage [2007/12/12(水) 08:46:11 ]
>>164
俺も自前で頑張って買った 2005 Professional 使ってたけど,
今は 2008 Express Edition 使ってます.

VC++ スレでは IntelliSense 糞とかいう書き込みを見かけるけど
マクロとテンプレートでの変態プレイにここまで対応してるのは
2005 レベルでもすげぇとおもう.

単に自分が Eclipse の設定をちゃんとしてないからかもしれません.
標準ライブラリまで指定してフルインデックスすれば
Eclipse の CDT でもちゃんと型追っかけてくれるんでしょうかね.

166 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:03:02 ]
ええ。
けど使い慣れたのを使うのが一番だと思います。
ちとスレ違いだしね。



167 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:35:23 ]
2008ってExpress出てるのかよ

168 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:22:35 ]
英語版だろ

169 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:32:16 ]
英語版でもいいよ

170 名前:デフォルトの名無しさん [2007/12/12(水) 19:51:46 ]
以下のように、可変個引数(モドキ)をとる関数をtupleを使って作りたかったんですが、
行き詰まりました。関数内でtuple要素全てにアクセスする方法はありますか?
可変個引数が可能ならばtupleじゃなくても構いません。ちなみに、引数の型はすべて一緒です。

template<typename T>
void multi_args(const T& arg){

   for(int i = 0 ;i< tuples::length<T>::value ;++i){

     //tuple要素すべてにアクセスしたい
    //arg.get<i>() は当然だめ
   }

}

int main(){

   multi_args( make_tuple(1,2,3) );

   return 0;
}

171 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 20:23:21 ]
>>170
素朴な疑問なんだが、std::vectorじゃいけない特別な理由でも?
# まぁ、vectorだと即値を列挙することはできないわけだが。

172 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:19:47 ]
>>170
boost::fusionならfor_eachができるんだが
ループ内で全要素にアクセスってのは無理だな。

173 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:02:53 ]
boost fusion について日本語で解説したページってある?

174 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:14:22 ]
NiceBoost

175 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:19:04 ]
>>170
boost::assign::list_of

176 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:31:39 ]
>>170
tuple って単に car が get_head で、cdr が get_tail なので、
 tuple_for_each(t, f) { f(t.get_head()); tuple_for_each(t.get_tail(), f); }
tuple_for_each(null_type, f) {}
とかを作ってしまえばいい

で、なぜか iterator/zip_iterator.hpp の detail 内にあったりするわけだが



177 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 07:11:53 ]
boost::multi_index_container で
boost::multi_index_container::tag
を使うと Visual C++ 2008 ではエラーになる.
C1001 なので原因がよくわからない.

178 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 10:41:48 ]
bindとlanbdaを同時に使うとき
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>
using namespace boost;
using namespace boost::lambda;
とすると、_1 を使ったときコンパイルできなくなる。
boost::lambda::_1 なんてやるとコンパイルできる。
プレースホルダー _1 ってbind.hppでもlambda.hppでも
重複して定義されてる?

179 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 10:46:27 ]
俺、ファンクタの合成くらいにしか使わないので、
結局 boost::bind だけしか使わないようにした。
って、それじゃ根本的な解決になってないか。

180 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:10:44 ]
>>178
その通り
usingの代わりにnamespaceの短縮名を使うと良いと思う

181 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:32:47 ]
>>180
ありがとう。
で、namespaceの短縮名とは何ですか?
boost::lambda::_1のように常に明示的に
指定するということですか?

182 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 12:35:49 ]
>>181 namespace bl = boost::lambda;

183 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:33:53 ]
>>182
ありがとう。
別名を与えられることは知りませんでした。
これで対応していきます。

184 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 15:48:19 ]
bjamのv2の使い方が良く分からないんですが、例えば以下をv2で
書く場合、どのように書いたら良いんでしょうか?
#bjam -sTOOLS=mingw "-sBUILD=release <runtime-link>static <threading>multi <native-wchar_t>on" --prefix=/c/msys/1.0/local install

185 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:59:08 ]
libcgi とか libcgi++ とか libcurl の asio 利用版
なんてのもでてくるのかね?

186 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:14:30 ]
sregex r = sregex::compile( "A([1-9]*|[a-z]*)A" );
string str1 = "A123A AaaaA A3b3A A9A";

if( regex_search( str1, m, r ) )
{
...
}

で、
"123"
"aaa"
"3b3"
"9"
という文字列を取り出すにはどういう記述をすればいいでしょうか?
m[2].str() とか書いても、aaaとか取得できないんです。

sregexでなくxpressive利用でもいいです。





187 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:35:19 ]
const_iterator begin()const;
Effects: Returns a starting iterator that enumerates over all the marked sub-expression matches stored in *this.

const_iterator end()const;
Effects: Returns a terminating iterator that enumerates over all the marked sub-expression matches stored in *this.

188 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:35:19 ]
regex_searchじゃなくてregrex_iteratorでも使っとけ

189 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 00:40:01 ]
regex_searchで
最小マッチ?を指定するとダイアログ出て落ちるんです

190 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:46:33 ]
エスパー魔美

191 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 20:10:54 ]
pastebin.windy.cx/?page=view&id=1197803292
boost::serialization::base_object を経由せずに
(Base&) で型変換してシリアライズするのはダメ?
一応読み込むこともできているようなんだけど.

ちなみに (Base) で型変換するとスライシングのせいか
読み込んだ時に正しく読み込むことができません.

192 名前:デフォルトの名無しさん [2007/12/16(日) 20:37:23 ]
Resist the temptation to just cast *this to the base class.
This might seem to work but may fail to invoke code necessary
for proper serialization.

マニュアルにはこう書かれているけど,かといって private で
継承した基底クラスをシリアライズするためには >>191
みたいにしないとだめだよねぇ?

193 名前:デフォルトの名無しさん [2007/12/17(月) 10:40:42 ]
www.boost.org/libs/serialization/example/demo_shared_ptr.cpp
ここには基底クラス A の shared_ptr に派生クラス B のポインタを
持たせてシリアライズしています。なお、 A は仮想デストラクタを
持っています。このとき

boost::archive::text_oarchive oa(ofs);
oa.register_type(static_cast<B *>(NULL));
oa.register_type(
static_cast<
boost::detail::sp_counted_base_impl<
B *, boost::checked_deleter<B>
> *

のように register_type しなければならないようなのですが、
BOOST_CLASS_EXPORT マクロのようなもので登録できない
ものでしょうか? archive を生成してから毎回登録するのは
忘れてしまいがちなので。

194 名前:193 [2007/12/17(月) 11:14:31 ]
というか、register_type で何を登録すればいいのかがわからん。
archives.free.net.ph/message/20071129.235833.ba9e02a9.en.html
でまさしく同じ問題についてQ&Aがあるんだけど、
結局上の URL の例をみろってことだけなんだよなぁ。

195 名前:193 [2007/12/17(月) 11:24:03 ]
pastebin.windy.cx/?page=view&id=1197858127
どうやらこれだけでいいみたい。
でも文字化けしてしまった…

#そのうち他言語対応しておきます。

196 名前:193 mailto:sage [2007/12/17(月) 11:25:44 ]
他言語→多言語 orz
しかも sage てなかった orz-----3



197 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 16:56:24 ]
Boost と POCO ってなかよしなの?
asio とか filesystem とかかぶってるみたいだけど.

198 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:34:06 ]
VS 2008 EE 日本語版

199 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:06:51 ]
class B{
public:
 virtual void mf();
};

class D : public B
{
public:
 void mf();
};
のように継承関係にあるクラスについて
shared_ptrはポリモルフィックに動作しますか?

つまり、
shared_ptr<B> bp(new D);
bp->mf() で D::mf() が呼ばれることはboostの仕様として
保障されてますか?

200 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:09:44 ]
はい

201 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:42 ]
thx

202 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 00:25:47 ]
#include "stdafx.h"
#include <iostream>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/if.hpp>
#include <vector>
#include <algorithm>
using namespace std;
namespace bl = boost::lambda;

int main()
{
unsigned int a[] = {0, 1, 1, 0, 1, 0, 0, 1};

for_each(a, a + sizeof(a)/sizeof(a[0]),
bl::if_(bl::_1 % 2 == 0) [cout << "偶数\n"].else_[ cout << "奇数\n"] );

}

これをコンパイルすると

private メンバ (クラス 'std::basic_ios<_Elem,_Traits>'
で宣言されている) にアクセスできません。

とエラーが出てコンパイルできません。原因は何でしょうか?
VC++ 2008 コンソールアプリケーションです。

203 名前:202 mailto:sage [2007/12/21(金) 00:44:29 ]
自己解決しました。

204 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 00:54:37 ]
わざわざ通知ありがとうございました。

205 名前:デフォルトの名無しさん [2007/12/21(金) 12:42:34 ]
boost::bind(&ClassA::MethodB, this, _1)

みたいなファンクタを生成するとき,ClassA に MethodB
が複数 (void MethodB(int) と void MethodB(double)とか)
定義されていたら,どちらのメンバ関数ポインタになるんでしょうか?

206 名前:デフォルトの名無しさん [2007/12/21(金) 12:57:01 ]
内輪で使うために作ったWindows版のバイナリパッケージを晒します.
ビルド環境
Visual Studio 2005 Professional SP1 日本語版
Visual C++ 2008 Express Edition 英語版

vc8 と vc9 でビルドするスクリプト
svn.windy.cx/websvn/listing.php?repname=Building.boost-trunk&path=%2F&sc=0

trunk の Windows 用インストーラつきバイナリパッケージ
C:\Program Files\boost\boost_1.35_20071202 以下に展開されます
アンインストールはディレクトリごと削除するだけ

ヘッダ(共通)
svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-header.exe
vc8用スタティック
svn.windy.cx/pub/boost_1_35_20071202-vc8.exe
vc8用DLL
svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc8-dll.exe
vc9用スタティック
svn.windy.cx/pub/boost_1_35_20071202-vc9.exe
vc9用DLL
svn.windy.cx/index.php?plugin=attach&refer=SVN.WINDY.CX&openfile=boost_1_35_20071202-vc9-dll.exe

自分はスタティックライブラリしか使わないのでDLL版の動作は未検証.
GMP, MPFR, MPFR++ などのバイナリパッケージも.
svn.windy.cx/



207 名前:205 mailto:sage [2007/12/21(金) 13:06:06 ]
パッケージは exe だけど,実体は自己展開 cab なので
拡張子を cab に変えればたいていのアーカイバで開けます.
あと,ランタイムに関してですが /MD と /MDd です.

208 名前:206 mailto:sage [2007/12/21(金) 13:06:56 ]
名前欄間違えた.

209 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 18:17:17 ]
>>205
static_cast<void (ClassA::*)(int)>(&ClassA::MethodB)
みたいに明示的にキャストしないと通らないと思った。

210 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 19:11:54 ]
>>209
               ∩
               ( ⌒)     ∩_ _
              /,. ノ     i .,,E)
             ./ /"    / /" .
   _n  グッジョブ!! ./ /_、_   / ノ'    
  ( l    _、_   / / ,_ノ` )/ /_、_    グッジョブ!!
   \ \ ( <_,` )(       /( ,_ノ` )      n
     ヽ___ ̄ ̄ ノ ヽ     |  ̄     \    ( E)
       /    /   \   ヽフ    / ヽ ヽ_//

VC9用をいただきました

211 名前:210 mailto:sage [2007/12/21(金) 19:13:04 ]
間違えた
>>209 ×
>>206 ○

212 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 16:13:54 ]
正規表現で調べる文字列にcharやwchar_tの配列は使用できないのでしょうか

213 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 17:06:19 ]
>>212
char*やイテレータを取るバージョンがあるはずだが

214 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:15:20 ]
>>213
以前のバージョンということですか?
できればxpressiveで書きたいので、最近のバージョンを使いたいのですが
それでは無理ってことでしょうか

215 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:34:45 ]
バージョンと言うかオーバーロードな
と言うかリファレンス見たら?

216 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:54:20 ]
>>215
つ 特殊化



217 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:22:28 ]
つか入力にイテレータ取るバージョンがあれば当然ポインタ食わせられるだろ。

218 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:55:17 ]
sregexがstd::string版なら、cregexがconst char*版。
Xpressiveでは、イテレータの型をテンプレート引数で指定する。
boost.org/doc/html/xpressive/reference.html#header.boost.xpressive.xpressive_fwd.hpp

219 名前:デフォルトの名無しさん [2007/12/24(月) 08:12:02 ]
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::for_each(v.begin(), v.end(),
boost::bind(operator<<, std::cout, _1));

このようにして各要素を出力することはできないのでしょうか?
なぜだか error C2065: '<<' : undeclared identifier
と言われてコンパイルできません.


220 名前:219 [2007/12/24(月) 08:54:23 ]
boost::bind に関するこのコードでなぜ最後のコメント部分の
コンパイルが通らないのでしょうか?
pastebin.windy.cx/?page=view&id=1198454028

221 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:25:58 ]
コンパイルできない理由はちょっとわからんけど、これじゃダメなん?
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));

222 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:38:51 ]
>>220
g++だと<unresolved overloaded function type>と言われたのでstatic_castしたら通った。
std::for_each(v.begin(), v.end(), boost::bind(
    static_cast<A &(A::*)(int)>(&A::operator =),
    &a,
    _1));

223 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:43:23 ]
>>219
intを出力するoperator <<は、cout (std::basic_ostream)のメンバ関数だから、
そのコードでは、正しいoperator <<へ辿り着けない。
もっとも、それ以前の問題でコンパイルエラーになっているようだが。

今回は221のいうとおりostream_iteratorもあるし、
その他演算子一般の場合は、bind使えなくてもlambdaがある。

224 名前:219 mailto:sage [2007/12/24(月) 09:48:19 ]
>>221
いや,もちろんそれでやりたいこととしてはOKなんですが,
一般的な演算子を指定できれば応用範囲も広がるかなと思って.

>>222
VC9 だとテンプレートを検索しまくって
「あれでもない,これでもない」と C2780 を連発した揚句,
時々 ambiguous だというエラーも出るんですよ.

なるほど, g++ でもそのままでは通らなくて,
static_cast すれば通るんですね. operator() だと問題なくて
operator= だと問題になる理由がわからないですが.
既定の代入演算子が別途用意されてしまうからかなぁ.
自前で = をオーバーロードした時って既定の = は
定義されないんでしたっけ?

でも独自にコンストラクタを作ってもコピーコンストラクタは
勝手に作られていたような気がする.

225 名前:219 mailto:sage [2007/12/24(月) 09:51:05 ]
>>223
なるほど,それで operator<< が見つからないと怒られてるんですね.
たぶんグローバル名前空間の operator<< を探しに行って「無い」
と怒ってるように思います.

自分はてっきりストリームの << 演算子はグローバル名前空間に
定義されていて必要なクラスに friend 指定されているのだと
思っていました.

226 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:35:14 ]
>>224
boost::bindはlambdaと違って一旦メンバーポインタにするから。
だからoverloadされてるとまずい。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<65KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef