【C++】template 統合スレ -- Part4
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG以下のスレッドを統合するスレです。
STLスレッド
Part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?)
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/
【C++】template 統合スレ -- Part2
http://pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち)
【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/
関連スレ、その他リンクは >>2-5 あたりに。
0002デフォルトの名無しさん
NGNGC++相談室 part29
http://pc5.2ch.net/test/read.cgi/tech/1082047479/l50
リンク
STLPort
http://www.stlport.org/
boost
http://www.boost.org/
Loki
http://freshmeat.net/projects/lokilibrary/
http://www.geocities.com/rani_sharoni/LokiPort.html
ISO/IEC 14882
Programming languages -- C++
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
http://www.kuzbass.ru/docs/isocpp/
0003デフォルトの名無しさん
NGNG・boost info
http://user.ecc.u-tokyo.ac.jp/~g940455/wp/boost/
・Hattareme Programming
http://www.dodgson.org/lab/hat/
・Let's boost
http://www.kmonos.net/alang/boost/
・Regex
http://www.s34.co.jp/cpptechdoc/article/regexpp/
・Boostを使おう
http://www.emaki.minidns.net/Programming/tools/Boost/
0004デフォルトの名無しさん
NGNG【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
0005デフォルトの名無しさん
NGNGC++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
Boost C++ Libraryプログラミング(2004/5/10発売予定)
http://www.kmonos.net/wlog/38.php#_1245040501
0006ヽ(`Д´)ゞ乙っ!!
NGNG・STL
Generic programming―STLによる汎用プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756134416/
Effective STL
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/
・テンプレートによるデザイン
Modern C++ Design
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/
0007デフォルトの名無しさん
NGNG・STL
STLによるコンポーネントデザイン
http://www.amazon.co.jp/exec/obidos/ASIN/475613422X/
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGclass B;
template<typename T> class D : public T {
public: void foo(int x) const {
// ここから
if (T != B) {
T::foo(x);
}
// ここまでをコンパイル時に判断したい
};
のですが、どういった方法があるでしょうか?
0010デフォルトの名無しさん
NGNGtemplate <typename T> struct IsB { enum { val = 0 }; };
template <> struct IsB<B> { enum { val = 1 }; };
template <typename T, bool t_isB> class D : public T {
public: void foo(int x) const { T::foo(x); }
};
template <typename T> class D<T, false> : public T {
public: void foo(int x) const {}
};
0011デフォルトの名無しさん
NGNGありがとうございます。
書き忘れたんですが、D<T>::foo()の問題の部分の前後には実際にはいくらか
コードが入る予定です。なので、できればD<T>自体の特殊化ではなく、foo(の
一部)だけの変更でどうにかしたいのですが無理でしょうか?
0012デフォルトの名無しさん
NGNG1. class D のさらに基底クラス用意して、共通処理を protected メンバ関数にする。
2. D::foo() から、その protected メンバ関数を呼ぶ。
3. protected メンバ関数では this ポインタを static_cast<D*>(this) として D* に
キャストすることで、D クラスのメンバ変数などを操作する。
0013デフォルトの名無しさん
NGNGtemplate<typename T> class E: public T {
protected: void foo(int x) const {T::foo(x);}};
template<> class E<B>: public B {
protected: void foo(int x) const {}};
template<typename T> class D: public E<T> {
public: void foo(int x) const {E<T>::foo(x);}};
0014デフォルトの名無しさん
NGNG> ・テンプレートによるデザイン
> Modern C++ Design
個人的に凄く良書だとおもう
0015デフォルトの名無しさん
NGNG何をいまさら・・・
ところでboost本ってもう書店に並んでるの?
0016デフォルトの名無しさん
NGNGタダの宣伝だろ。
クソが。
0017デフォルトの名無しさん
NGNGなるほど(・∀・)!
ありがとうございました。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGcbook24もamazonもまだヒットすらしないな
0020デフォルトの名無しさん
NGNGいや正直俺には難し過ぎ・・・orz
0021デフォルトの名無しさん
NGNG{
template<int I,typename T> A& operator=(const T& t)
{
return *this;
}
};
int main()
{
A a;
a = 1
return 0;
}
代入演算子のどこに<100,int>って書けばいいか教えてください
0022デフォルトの名無しさん
NGNGa.operator=<100,int>(1);
0023デフォルトの名無しさん
NGNGだよねー。
ISBNで検索しても引っかかってくれない。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG規格上および実際のところ。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGみんないっちゃだめだよ〜wwww
http://www.geocities.jp/aransk88/contents4.html
0028デフォルトの名無しさん
NGNGstatic const int の替わりに enum を使うのは
実装の遅れたコンパイラに対応するためのハック。
規格上は別物。
実際のところはなるべく意味の適するものを使うのがベター。
0029デフォルトの名無しさん
NGNG> static const int の替わりに enum を使うのは
> 実装の遅れたコンパイラに対応するためのハック。
factorial<>とかpow<>とか、よくあるcompile time computationに適したのはどっちでしょう?
0030デフォルトの名無しさん
NGNGenum はとり得る値が列挙された型を定義するので、意味が適しているとは思えない。
static const int のほうが意味が適していると思う。
実際問題としても、
int で特殊化した関数テンプレートにテンプレート引数を明示せずに列挙子を渡したとき、
特殊化したバージョンにならなくて困ったりする、かもしれない。
static const では明示的に型を指定することができるので
std::size_t や bool が使えて助かることがある、かもしれない。
0031デフォルトの名無しさん
NGNGありがとうございます。過去スレ(Generic Programming with C++ Template)で議論になって
結論なしだったんで気になってて。
> int で特殊化した関数テンプレートにテンプレート引数を明示せずに列挙子を渡したとき、
> 特殊化したバージョンにならなくて困ったりする、かもしれない。
なるほど。どうなんだろ。
0032デフォルトの名無しさん
NGNGアロケータってのが理解できないんですが
どうしたら良いのでしょうか?
0033デフォルトの名無しさん
NGNGModern C++ Designを読みましょう。
第4章「小規模オブジェクトの割り当て」当たりがお勧め。
0034デフォルトの名無しさん
NGNG本なんか買う前にgoogleに聞いておくべきだな。
0035デフォルトの名無しさん
NGNGそうかもしれん。
取り敢えずアロケータを知るために最小限学習すべき要件。
1.メンバ関数
allocate()
construct()
destroy()
deallocate()
2.STLの提供する関数
std::uninitialized_fill()
std::uninitialized_fill_n()
std::uninitialized_fill_copy()
3.STLの提供するイテレータ
std::raw_storage_iterator
最低限これだけ知っていれば自分でアロケータを書く事が可能
になる。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGtypedefテンプレートか・・・・
ま、俺様コンテナを作る時、new/deleteの速度と効率に不満がある
人は(大抵不満があるはず)アロケータを一度書いてみよう。それか、
boostにもpool_allocという小規模チャンク用の高速アロケータがある。
メモリプールクラスを一から書けと言われるとぞっとする。
0038デフォルトの名無しさん
NGNG確かに(w
0039デフォルトの名無しさん
NGNGpool_allocatorって便利やね
boostを惚れ直しマスタ
0040デフォルトの名無しさん
NGNG俺もboost::pool_allocatorを使って標準STLのパフォーマンスが
どれくらい上がるか実験してミターヨ。
compiler : gcc3.3.3(MinGW)、STL library : STLport4.6.2
std::vector : 約60%up (pool_allocator) push_back()
std::list : 約26%down (fast_pool_allocator) push_back()
std::deque : 約100%down (pool_allocator) push_front()
std::deque : 約300%down (pool_allocator) push_back()
push_back()、push_front()だけの比較だけど、いまいちだな。
vectorは改善されたが他のコンテナは却って遅くなる。
それだけSTLportのアロケータは優れているって事か。
いや、STLportが自分のアロケータ用に最適化されていると
言うべきか。どなたか追試ヨロ。
0041デフォルトの名無しさん
NGNG等レス希望。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1076074304&res=9&fi=no
0042デフォルトの名無しさん
NGNGどのコンテナでも、内側のループ(j)を1,000や10,000じゃなくて、10^6くらいに
して比較したらどうなるかな?
それから、内側を十分回せば外側(i)は10,000も回さなくてもいいんじゃない?
0043デフォルトの名無しさん
NGNGを用いてはいけないことに気がついた。
004439
NGNGそこの10にあげといたけど(SIZEを大きくすると)
GCCのdeque+pool_allocatorがやたら時間食うね。
サイズが分かってるときはvector+reserveが一番速くて
listはpool_allocator使った方が速い。
0045デフォルトの名無しさん
NGNGレスサンクス。10はなぜか手持ちのMinGW(3.3.3)で
cmp_rs.push_back(result(name+" cmp",( --rs.end() )->time / (--(--rs.end()) )->time *100 ));
の行が
C:\mingw\boost\pool2.cpp non-lvalue in decrement
と出るのでstd::advance()ででも書き換えてみるつもり。俺STLport使って
るから何か違うのかなと。
std::dequeは遅いねえ。push_front()は速いんだけどねえ。
0046デフォルトの名無しさん
NGNG確かboostにそのためのラッパがあったような。
0047デフォルトの名無しさん
NGNGことが多くならないですか?
0048デフォルトの名無しさん
NGNGboost::prior だね。
>>47
無いけど、例えばどんなケース?
0049デフォルトの名無しさん
NGNG> std::vectorの要素にコンストラクタで失敗するオブジェクトを用いてはいけない
そんなことないと思ってるんで、何故いけないのか解説きぼん。
0050デフォルトの名無しさん
NGNGIf you are seriously concerned about performance, use
fast_pool_allocator when dealing with containers such as std::list,
and use pool_allocator when dealing with containers such as
std::vector.
0051デフォルトの名無しさん
NGNGでも出てるけど、boost本が並んでる都内の本屋無い?
月曜発売なんだろうけど土日に読みたいんだよね、やっぱ。
0052デフォルトの名無しさん
NGNG俺もわからん
教えて>>43
0053デフォルトの名無しさん
NGNGtemplate<template<typename>class T,typename U>
struct X{};
template<typename T>
struct Y: X<Y,T>{};
int main()
{
Y<int> y;
return 0;
}
error C3200: 'Y<T>' : テンプレート パラメータ 'T' に対する無効なテンプレート引数です、クラス テンプレートが必要です。
error C3200: 'Y<T>' : テンプレート パラメータ 'T' に対する無効なテンプレート引数です、クラス テンプレートが必要です。 with [ T=int ]
0054デフォルトの名無しさん
NGNG試してみたけど、Cygwin + gcc 3.2 ではコンパイル通るな。
でも、標準C++準拠率が高いといわれる VC7.1 の cl でコンパイル通らなかったけど。
0055デフォルトの名無しさん
NGNGtemplate<template<typename>class T,typename U>
↓
template<class T,typename U>
でいいのでは。
なんで gcc でコンパイル通るのかの方が気になる。
0056デフォルトの名無しさん
NGNGん?X<Y,T>だぞ。X<T,T>じゃない。
よくみてみ。
0057デフォルトの名無しさん
NGNG> struct Y: X<Y,T>{};
ここで X に渡してる Y が、 template 引数を受け取った後に実体化される型 Y<T> と解釈されてしまうらしい。
解決法はわかんないけど。
0058デフォルトの名無しさん
NGNG以下が正しい書き方になります.
struct Y: X< ::Y,T>{};
0059デフォルトの名無しさん
NGNG> struct Y: X< ::Y,T>{};
へー。gcc3.2.2でも通った。はじめて見た。
006053
NGNG罠だったのか。。。。。。。
レスしてくださった皆様ありがとうございました!!!!
0061デフォルトの名無しさん
NGNGどういう罠?
006258
NGNG実体化された型を指すことになります.
template<typename T>
class C{
// ここで`C'と書けば実体化されたCの型を表します.
// T = intで実体化されたなら,C<int>と同義になります.
};
問題は53さんのようにtemplate template引数を引き渡したいときで,
この場合,class内部から::を使って大域のクラス名を指すことによって解決できます.
ところがここにもう一つワナがあって<:がダイグラフとして認識されてしまう
([と同じになる)ので,<と::の間にスペースが必要となり,
結果58の書き方になります.
GCCとVCのコンパイラの反応の違いは,恐らくsuper classの指定の部分を
クラスの内部と見るか外部と見るかの実装の相違から来ているものと邪推します.
0063デフォルトの名無しさん
NGNGこんな感じのをやりたいんですけど、コンパイルできません。
どう書けばいいでしょうか?
0064デフォルトの名無しさん
NGNGまずは日本語で表現できるかどうかやってみれ。
0065デフォルトの名無しさん
NGNGgccのバグで、3.4で修正が入ってる。
http://gcc.gnu.org/gcc-3.4/changes.html
ここで
"Inside the scope of a template class"を検索。
0066デフォルトの名無しさん
NGNG規格の対応する項目は 14.6.1 -1-
型の名前となる条件は"when the name of the template is neither qualified nor followed by <"
とあるので、テンプレートの名前とするためには、名前を"qualified"にする必要がある。
そこで文法上の記号 qualified-id にどうにかマッチさせるために
名前空間の指定を行う必要があるわけで、かなり歪んだ表現であると言える。
しかも、ネストした名前空間内で宣言と定義を同時に行う(ごく普通の)場合、
名前空間のネストを全てグローバルからたどって指定する必要があるみたい。
宣言と定義を分ければ、
namespace xxx{ template<typename T> struct Y; }
template<typename T>
struct xxx::Y : X< xxx::Y , T > {};
using xxx::Y;
という書き方もできるようになるが、歪み方が変わったぐらいにしかならない。
一応、カット&ペーストで名前空間を引っ越すことができるかな。
ここは template キーワードで修辞できるようにしてほしかったなぁ。
struct Y : X< template Y , T > {};
Defect Reportでも漁るか・・・。
0067デフォルトの名無しさん
NGNGだけなんだと痛感する
0068デフォルトの名無しさん
NGNGstruct xxx::Y : X< xxx::Y , T > {};
って自分で自分を定義してからだめな気がするんだが、
違うのかな?
0069デフォルトの名無しさん
NGNG新しい世界を開拓しているフロンティアなわけだが。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGそれか、解説してくれるとありがたいんですが
目的は一応わかりました。
0072デフォルトの名無しさん
NGNGC++ Templates - the complete guide
007366
NGNGdkuugはなんか重い。
comeaucomputingに置いてある奴の方がアクセスが早いような気がしたんで、リンクはそっちに貼る。
templateキーワードを使った素敵な修辞はもちろん見当たらなかったけど、
>>62 の
> GCCとVCのコンパイラの反応の違いは,恐らくsuper classの指定の部分を
> クラスの内部と見るか外部と見るかの実装の相違から来ているものと邪推します.
これに関連するやつが見つかったのでここに記しておきます。
http://www.comeaucomputing.com/iso/cwg_defects.html#432
によると、injected class name(今回の件では>>57,>>62の言っているものにあたる)の
宣言地点はクラス定義の開き括弧のすぐ後だということになるらしい。
決まったのは2003/10のミーティングということなので、割と新しい話題のようだ。
ということは、
> struct Y: X<Y,T>{};
これで通るのが標準化委員会の意向ということになる。
逆に
template< typename T > struct A {};
template< typename T > struct B : A< B > {};
これは通らなくなり、2行目を
template< typename T > struct B : A< B< T > > {};
とする必要がありそうだ。
実際にやってみると、VC(Toolkit 2003)では両方OKで、gcc(3.3.1)では上だけエラーになる。
これはこれでまた一悶着起こりそうな予感が・・・。
そもそも"injected class name"がらみの問題が多すぎて、
本当でこれでいいのか、と心配になった。
007451
NGNGこれですか?読みやすいですか?洋書なので本屋にもなくて立ち読みすることできないんで。
http://www.amazon.co.jp/exec/obidos/ASIN/0201734842/qid%3D1084094234/249-4149864-2990714
0075デフォルトの名無しさん
NGNGpdfでDL(ry
0076デフォルトの名無しさん
NGNGいや寧ろCHM版の方が(ry
0077デフォルトの名無しさん
NGNG> pdfでDL(ry
あるの?
0079デフォルトの名無しさん
NGNGある所にはあるがここにはとても書けない。hint : google
0080デフォルトの名無しさん
NGNGいや、売ってるの?という意味。
書籍は持っているんだが重くてな。
0081デフォルトの名無しさん
NGNG絶版??
0082デフォルトの名無しさん
NGNGamazon.comとか紀伊国屋書店BookWebでなら注文できるみたいだよ。
0083デフォルトの名無しさん
NGNGピンポイントなドキュメントで(゚д゚)ウマーです.
>>74
横から失礼.templateの基本的な文法事項から丁寧に解説してくれているので,
読みやすいと思います.後は英語が読めれば大丈夫かと.
文法だけでも複雑な場合(例えば53さんの事例もほとんどそのまんま載っています)から
C++のtemplateの文法の拡張の方向性まで網羅されており,
またtemplateの使い道も,分かりやすい例を交えてこれでもかというほど載っています.
まさにcomplete guideの名を冠するにふさわしい1冊かと.templateを極めたいなら是非.
ただ,高いのが少々難点・・・.
それにしても,templateの話題だけで500pオーバーの本が書けるC++に
末恐ろしさを感じるのは私だけでしょうか?
0084デフォルトの名無しさん
NGNG末恐ろしいというか単に
template って枠組みをそれまでの C++ に押し込むために
無理矢理やってるだけだよ。
0085デフォルトの名無しさん
NGNG6502にしろ8088にしろ、なぜかメインストリームになっているし、
C++も文法的にすごく汚いのに山ほど本が出ているし。
で、なぜかすっきりした構造のハードウェアにしろ言語系にしろ、
あまり流行らずにマイナーになってしまうような。
0086デフォルトの名無しさん
NGNGそりゃ、プロセッサにせよ言語にせよ、泥臭いには泥臭いなりの理由があるから。
C++ のメリットを大半捨て去って、代わりに C++ に足りないものを一つ二つ実装
したところで、デメリットのほうが大きくなってしまう。
これが JavaScript, Java(EJB), VB みたいに、最初から C++ がターゲットとして
いなかったニッチ層を目指して投入されれば、話が違ってくるけど。いつの間にか
ニッチの方がメインストリームに変わることもあるしさ。
0087デフォルトの名無しさん
NGNGこんなに幅を利かせているわけはないわなw
0088デフォルトの名無しさん
NGNG増えることは間違いない。
#ポインタはなくさないで!
0089デフォルトの名無しさん
NGNG今じゃ組み込みには絶対使わんしな。
0090デフォルトの名無しさん
NGNGC3は普通に組み込みに用いられてますが?
0091デフォルトの名無しさん
NGNGサーバ向けCPUだと圧倒的なコストパフォーマンスがある。
0092デフォルトの名無しさん
NGNGはぁ?
0093デフォルトの名無しさん
NGNGC3を、組み込みね。それを普通という感覚。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNGはぁ?
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGここにスペックの詳細があるよ。でも、このCPUじゃ使い物にならんとおもふ。
http://www.arabtimes.com/mixed3/2.jpg
0099デフォルトの名無しさん
NGNG「絶対」使われないはずなのに、使用例があるのはどういったことで?
0100デフォルトの名無しさん
NGNG真面目に教えてくれないか?ぐぐっても見つからんのだが。
0101デフォルトの名無しさん
NGNG>>93(=>>89)が知らなかっただけじゃないのか?
0102デフォルトの名無しさん
NGNG世界が狭いからだろうな。
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG話が繋がってないよな。
>>106シェアに何の意味があるの?
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG読むのはこれから。
0116デフォルトの名無しさん
NGNG本屋はともかくとしても紀伊国屋とかにも無かったんだけど…
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG売ってる。
かなり大量に平積みだったよ。
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGModern C++ DesignのGenScatterHierarchyの部分で(P72,P73あたり)
typedef GenScatterHierarchy<TYPELIST_3(int,string,Widget),Holder> WidgetInfo;
とやった後、これを使う時
WidgetInfo obj;
string name = (static_cast<Holder<string>&>(obj).value_;
としています。
これで正しいようなのですが、どうしてHolder<string>の参照としてキャストしているのかがわかりません。
Holder<string>にキャストすればいいんじゃないの?と思うのですが、コンパイラで弾かれます。
なぜ参照で無ければダメなのでしょうか・・・
012143
NGNG多くのvectorでは内部でメモリの確保と要素のコンストラクタの呼び出しを別にしている。
メモリの確保は基底・もしくはメンバクラス(ここではとりあえず基底としておこう)で確保される。
この基底はvectorのコンストラクタが呼ばれる前に生成される。
そのあとvectorのコンストラクタで要素のコンストラクタを呼び出すのだが、
ここで途中で失敗すると、もちろんvector自身はコンストラクタが成功してないのでデストラクタが呼ばれない。
そしてスタックの巻き戻しによって基底のデストラクタが呼ばれる。
ここでメモリと要素のデストラクタの呼び出しが行われるのだが、問題がある。
メモリは基底の生成時に成功しているので大きさがわかり適切に廃棄される。
しかし、要素のデストラクタに対応するコンストラクタ呼び出しは継承先のvectorで呼び出され失敗しているので、
その数がメモリの大きさと一致しない。
よってコンストラクタの数とデストラクタの数の不一致が起こる。
0122デフォルトの名無しさん
NGNGコンストラクト失敗に出食わすまでに,
成功した要素についてはきちんとデストラクトされるのでは?
で,失敗した要素については,
それがクラスであれば,それを構成するメンバ変数の内
コンストラクトに成功しているものについてはデストラクタが呼ばれ,
失敗したメンバ変数については,
それがクラスであれば,それを構成するメンバ変数の内
コンストラクトに成功しているものについてはデストラクタが呼ばれ....
(以下,組み込み型まで繰り返し.)
ってのじゃないの?
0123122
NGNGついでにageとこう.
>>122
> コンストラクト失敗に出食わすまでに,
> 成功した要素についてはきちんとデストラクトされるのでは?
コンストラクト失敗に出食わすまでに成功した要素については,
きちんとデストラクトされるのでは?
012443
NGNG俺もそれを期待していた。
たとえば
#include<vector>
#include<iostream>
using namespace std;
class obj{
public:
obj(){/*ここで失敗する可能性*/cout<< "constructor" <<endl; }
~obj(){cout<< "destructor" <<endl; }
};
int main(){
try{
vector<obj> v(10);
}catch(...){}
}
とでもしてvectorの途中たとえば5個目で失敗(例外を送出)したとするとどうなるか。
多分コンストラクタ5回デストラクタ11回(このうち1回ずつはデフォルトのコピーのためのテンポラリ)
となるだろう。ようは余計にデストラクタが呼ばれる。少なくとも組み込み配列とは挙動が違う。
決して改良するのは難しくないはずなんだが・・・
012543
NGNG問題は生のメモリにたいしてコンストラクタを呼んでないのにデストラクタを呼んでしまうことだ。
0126デフォルトの名無しさん
NGNGgcc3.4.0とVC7.1で試して見たがコンストラクタがどちらも
1度しか呼ばれなかったよ?
デストラクタは10個呼ばれてたけど。
0127デフォルトの名無しさん
NGNGclass Test {
public:
Test(int i = 0) { if (i == 5) throw std::exception(); }
};
int main()
{
std::vector<Test> v;
for (int i = 0; i < 10; i++)
v.push_back(Test(i));
}
0128デフォルトの名無しさん
NGNGError 00001. 0x400000 (スレッド 0x04A8):
Exception 0xC0000005: Access violation at 0xE24028.
呼び出し履歴:
0x0CD1BE31(=CG32.DLL:0x01:01AE31)
0x0CD14BA9(=CG32.DLL:0x01:013BA9)
0x0CD142BE(=CG32.DLL:0x01:0132BE)
0x0CD1523E(=CG32.DLL:0x01:01423E)
0x0CD24DD2(=CG32.DLL:0x01:023DD2)
0x0CD010BB(=CG32.DLL:0x01:0000BB)
コード行が示されないのでmain()の後始末(デストラクタ部)にて
アクセスエラーが生じていると読める。
012943
NGNGint i = 1;
class obj{
public:
obj(){
if(i++ == 5){throw std::exception();}
cout<< "constructor" <<endl;
}
~obj(){cout<< "destructor" <<endl; }
};
とでもしておこう。今コンパイラのないところにいるんで、確認できないが。
>>127
ああ、それでもいいのか。自分はメンバでなくコンストラクタのこと気にしてたんで。
try/catchで囲んでいないからじゃなくて?
0130122
NGNG>>126は多分別問題なので,ソースを改編.
$ cat test.cpp
#include<vector>
#include<iostream>
#include<exception>
#include<algorithm>
using namespace std;
class obj{
size_t id;
public:
obj (size_t p): id (p) {if (id == 5) throw exception (); cout << "constructor " << id << endl;}
obj (const obj &p): id (p.id) {cout << "copy constructor " << id << endl;}
obj &operator = (const obj &p){cout << "assignment operator" << endl; id = p.id; return *this;}
~obj(){cout<< "destructor " << id <<endl;}
};
int main()
{
try {
vector<obj> v;
v.reserve (10);
for (size_t i (0); i < 10; ++ i)
v.push_back (obj (i));
} catch (const exception &p) {
cerr << "Catch!" << endl;
}
return 0;
}
0131122
NGNG$ ./test
constructor 0
copy constructor 0
destructor 0
constructor 1
copy constructor 1
destructor 1
constructor 2
copy constructor 2
destructor 2
constructor 3
copy constructor 3
destructor 3
constructor 4
copy constructor 4
destructor 4
destructor 0
destructor 1
destructor 2
destructor 3
destructor 4
Catch!
ちゃんとディストラクトできてるような.....
0133122
NGNG$ cat test.cpp
#include<vector>
#include<iostream>
using namespace std;
class obj{
static size_t count;
size_t id;
public:
obj (): id (count ++) {cout << "constructor " << id << endl;}
obj (const obj &p): id (p.id) {cout << "copy constructor " << id << endl;}
obj &operator = (const obj &p){cout << "assignment operator" << endl; id = p.id; return *this;}
~obj(){cout<< "destructor " << id <<endl;}
};
size_t obj::count (0);
int main()
{
try{
vector<obj> v(10);
}catch (const exception &p){
cerr << "Catch!" << endl;
}
return 0;
}
0134122
NGNGconstructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
copy constructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
destructor 0
1個はコンストラクタを呼んであとは,
それをコピーみたい.
0136デフォルトの名無しさん
NGNGコピー元として一次オブジェクトを構築し
すべての要素はそのコピーコンストラクトだよ。
0137デフォルトの名無しさん
NGNGうわぁ、try - catchで囲んだらCodeGuard掛けてもエラー出ないや。
class Test {
int i_;
public:
Test(int i = 0) : i_(i) { if (i_ == 3) throw std::exception(); else std::cout << "Ctor(" << i_ << ')' << std::endl; }
~Test() { std::cout << "Dtor(" << i_ << ')' << std::endl; }
};
int main()
{
std::vector<Test> v;
try {
for (int i = 0; i < 6; i++)
v.push_back(Test(i));
}
catch (const std::exception& e) {
std::cout << "Catch! " << std::endl;
}
}
0138デフォルトの名無しさん
NGNGDtor(0)
Ctor(1)
Dtor(0)
Dtor(1)
Ctor(2)
Dtor(0)
Dtor(1)
Dtor(2)
Catch!
Dtor(0)
Dtor(1)
Dtor(2)
0139デフォルトの名無しさん
NGNG014043
NGNGスレ汚しした。ああしゃれになんねえorz
014171
NGNG読みました。うーんやっぱりExpression template むずい。
構文解析自前で書いてるんですよね。んー。頭がうにになりそう。
プロキシクラス(っていうのかなー?)のスパゲッティだわ・・・
でも、とりあえずサンプルプログラムのコンパイルは通りました。
ここの解説は比較的簡単なんですが説明部分をこぴぺしても
全然コンパイル通らないんですよ。class -> struct 変換は当然やったんですが
(2)のvectorのテンプレート引数の書式おかしいんじゃないかなぁ?
http://www.icot.or.jp/FTS/REPORTS/H12-reports/H1303-AITEC-Report3/AITEC0103-R3-html/AITEC0103-R3-ch3_4_4.htm
まだどうもクラスの関連がよくわかってないので
C++ Templates - the complete guide
と格闘してみます。ちょっと理解の手助けとしてアドバイスいただけるとありがたいんですが
0143デフォルトの名無しさん
NGNGコピペで通らないのと直接は関係ないですが,
「ここでは、明らかなコンストラクタやデストラクタ等や、public/privateは削除してある」
とあるので,コンストラクタやデストラクタは用意しましょう.
まず,(1)の"template<class Op>"の位置がおかしいと思います.
operator=をtemplateにするべきかと.これで(2)の記述とつじつまが合うはずです.
さらに細かいことを言うと,(3)の特殊化の他にoperator+(vector const &, Vop<Vb> const &)と,
operator+(Vop<Va> const &, Vop<Vb> const &)の特殊化が必要なはずです.
014471
NGNGあ!なるほど。
あと、
特殊化というのは
template<typename X>
のXに具体的な型を設定することなんでしょうか?
特殊化というのは一般的な名称なんでしょうか?
C++ Templates - the complete guide のサンプルプログラムのクラスの依存関係
を絵に描きだしてみたんですが、たぶんここら辺はお決まりの書き方になるんじゃないかと
思うので、セクション18の最後に公式風にまとめてもらえるとありがたいのにと思いました。
0145デフォルトの名無しさん
NGNGe.g. http://www.gotw.ca/gotw/049.htm
def: http://www.kuzbass.ru:8086/docs/isocpp/template.html
0146143
NGNGただのオーバーロードですね.間違えました.申し訳ない.
0147デフォルトの名無しさん
NGNGbad_expressionが投げられて、what()するとempty expressionと、そのままの答え。
perl互換じゃないのかとドキュメント見たりぐぐったりしたけど全然empty expressionに関する情報が無い。
regex_constantsにそれらしいフラグも無い。
0148デフォルトの名無しさん
NGNGそれは ((abc)?) とどう違うの?
0149147
NGNG説明足らずでごめんなさい。
c/migemoっていうライブラリが(|abc)みたいなのを返しちゃうんで、
empty expressionをエラーにしない方法が欲しいんです。
欲しいというか、あるはずだと勝手に思い込んでます。
0150148
NGNGしかし、C/Migemoはワシも使ってるけど、(|abc) みたいなのを
返してきた記憶がないんだが、どういう入力すると出る?
0151147
NGNGfaceで、洋風顔文字が返るんですが、
その中に"X-("なんてのがあって、それが原因でおかしくなってたみたいです。
migemo_set_operatorとregbase::bk_parensで解決です。
empty expressionはエラーにするのが正しい正規表現なんですね。
148さん、お付き合いいただきありがとうございました。
0152デフォルトの名無しさん
NGNG例えば整数型のみをパラメータにとる
(整数型以外をパラメータに渡すとコンパイルエラーになる)
クラステンプレートとか
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG// 特殊化されていないものは、不完全な宣言のみ
template< typename T > class foo;
// 必要なものだけ特殊化
template<> class foo<int>
{
...
};
0155デフォルトの名無しさん
NGNGtemplate<> って<>が空なのはどういう意味なんでしょう?
0156デフォルトの名無しさん
NGNG154の場合では,Tがintという具体的な特定の型の場合のfooの定義を特殊化している.
templateなんだけれど,テンプレート引数の具体的な型が明示されるので
テンプレート引数が不要になり,結果template<>という書き方になると思えばよろしいかと.
0157デフォルトの名無しさん
NGNG};
とはどう意味が違うんですか?
0158デフォルトの名無しさん
NGNG・ある型のみに限定した引数をもつテンプレートの宣言
は異なるってことです。特殊化っていわれるとちょっとニュアンスがちがうかな?
いわゆるストラウストラップ本の訳に出てくる特別バージョンです。
一般バージョンでは補えない場合、特別その型のみに限定したバージョンを用意できて
その場合後者の宣言になるってことです。
0159デフォルトの名無しさん
NGNGコピーコンストラクタと代入演算子はprivateに宣言だけして定義はしない。
ってのに似てるな。
0160デフォルトの名無しさん
NGNGtemplate<typename T> void foo(T)
{
T が double の場合の処理{
}
Tがcomplexの場合の処理{
}
}
っていうことなんですが。
sizeofとか使うのはバグの元だと思うので・・・?
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG特別バージョン作らなくてすむ場合の方が少ないような希ガス。
0165デフォルトの名無しさん
NGNGなんかピンと来ないな。
なるべく簡単な(無理を言って済まんが)例を出してくれないか?
0166デフォルトの名無しさん
NGNG164じゃないけど。
特殊化がわからないって意味?それとも特別バージョンを作る理由がわからないってこと?
0167デフォルトの名無しさん
NGNG作る理由の方。曖昧な言い方でスマソ
特殊化を使う場面はTypeTraits系、メタプログラミング、最適化くらいしか思いつかない。
実際にもあまり書いた記憶がないので、例を見せてほしいなと。
0168デフォルトの名無しさん
NGNGこれって重要ではないかと?
complex<zzz>/double/float をテンプレート引数に想定してるときで、
conjをたくさん使うようなところ。typeid だと実行時判定
0169デフォルトの名無しさん
NGNGそんだけ理由があれば十分かと。
160の要望を解決するためには(設計が悪いのかもしれないけどこれだけだとわからない)しないわけにはいかない。
0170デフォルトの名無しさん
NGNGオーバーヘッドをネグれる場合、積極的につかっちゃ駄目なの?
0171167
NGNG例えば、
namespace mymath{
inline double conj(double d) {return d;}
inline float conj(float f) {return f;}
/* ほかにもいろいろ;boost::enable_ifを使っても良いかな */
}
template <typename T> void f(T t)
{
using mymath::conj;
/* conj(t)を呼び出していろいろする */
}
だから、
>特別バージョン作らなくてすむ場合の方が少ない
ってのはやっぱりおかしいような気がする。
0172デフォルトの名無しさん
NGNG>inline float conj(float f) {return f;}
特殊化せずに局所的に型に応じたconjを自前で用意したわけで、結局、同じことじゃないかと。
0173167
NGNGfのような関数を書くたびに特殊化をする必要はない、ということ。
>>168はconjではなくfを特殊化するといっているように読めたので。
読み違えてたらスマソ
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGプラウガさん、C magazineに翻訳連載始まりましたね。
0179デフォルトの名無しさん
NGNG若干話しそれますけれど,自分ならtraitsにしますね.
template<typename T>
struct numeric_traits{
BOOST_STATIC_ASSERT(false); // ちゃんとtraits定義してないとダメよ
};
template<>
struct numeric_traits<double>{
static double real(double const &d){ return d; }
static double imag(double const &d){ return 0; }
static double conj(double const &d){ return d; }
// その他もろもろ
};
template<>
struct numeric_traits<std::complex<double> >{
static double real(std::complex<double> const &z){ return std::real(z); }
// あと同様に
};
template<typename T>
class C{
// conjなどは全部numeric_traits経由で
};
0180デフォルトの名無しさん
NGNGアクセスするにはどうすれば良いのでしょう?
以下のテストコードではエラーが出たのですが…
--
'data' : 'pair<int const ,struct ST>' のメンバではありません。
--
typedef struct {
int data;
} ST;
void main(){
map<int, ST> mp;
ST st;
st.data = 2;
mp[1] = st;
map<int, ST>::iterator i = mp.begin();
cout << (*i).data << endl;
}
0181デフォルトの名無しさん
NGNG> cout << (*i).data << endl;
cout << i->second.data << endl;
0182以後は質問スレへ
NGNGfor (p = &a[first]; p < &a[last] ; p++) { (略)
の汎化だよ。集合データをなめるポインタ。
ってこれスレ違いなんじゃあ…
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGSTLは規格で、STLportはSTLの実装の1つ
0186183
NGNGさっそくどうもです。
では、VC++とかに付属されてるSTLも実装の1つということですね。
最初から付属されてるのにSTLportをVC++用にわざわざインスコしてる人達がいるってことは、
付属物よりメリットがあるから、ってことですよね?
183は質問の仕方が悪かったですが、そういうメリットを知りたかったということです…
0187デフォルトの名無しさん
NGNGVC6に付属しているSTLはンコだったので、STLportを入れる人が多かった
VC7のSTLはだいぶマシになってる
ただし、STLportにはSTLで規定されていないコンテナクラスも含まれていたり、
#defineで設定を切り替えれるなどから、今でも入れる人は多い
0189デフォルトの名無しさん
NGNG> ただし、STLportにはSTLで規定されていないコンテナクラスも含まれていたり、
VS.NET 2003 だと hash ベースの連想コンテナも用意されてるよ。
STLport とはちょっとインターフェース違うけど。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGLokiのシングルトンは
class A
{
...実装...
};
typedef Loki::SingletonHolder<A> SingleA;
//実行部分
SingleA::Instance().method();
のような形で利用するわけですが、A自体はシングルトンになりません。
SingleAはシングルトンだけれどもAはいくらでも複製できてしまいます。
Aは一つしか生成できるべきではないっていう責務を満たしてなく、
大域的にアクセス出来る仕組みだけを提供しているように感じます。
Aをシングルトン的に扱うためには、A自体をシングルトンっぽく書いて
friend class SingletonHolder<A>;
とでもしないとなりません。
あんまり意味無い様に思うんですが、どうでしょうか。
0192デフォルトの名無しさん
NGNG> A自体をシングルトンっぽく書いて
なんのこっちゃ?
コンストラクタをprivateにするだけやん。
0194デフォルトの名無しさん
NGNG> コピーコンストラクタ、代入演算子を
ここはboost::noncopyableのアイディアを借りると楽になる。
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNGある意味C++の哲学を表していますなぁ
『SingleA経由でアクセスするなら面倒を見てやるけど、わざわざAのオブジェクト作って
アクセスしようとするんだったら面倒みないよ。勝手にすれば?』
つうことですかね。
0197デフォルトの名無しさん
NGNGハァ?
ソース公開されてんだから読めよ。アホか。
0198デフォルトの名無しさん
NGNGソースも読めない糞ガキがほざいてろ。カスが。
0199デフォルトの名無しさん
NGNGstruct fib {
enum { value = ((N & 1) == 1) ? 0 + fib<N-1,P,Q,A*(P+Q)+P*B,P*A+Q*B>::value : fib<(N>>1),P*P+2*P*Q,P*P+Q*Q,A,B>::value };
};
template <int P, int Q, int A, int B>
struct fib<0, P, Q, A, B>{
enum { value = B };
};
というコードはコンパイルできるのですが、0 + を消すとコンパイルできません。なんでですか?
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGVC++7.1だと 0 + なしでもコンパイルできたよ。コンパイラのバグじゃない?
それより、なんでそれがフィボナッチ数列を計算できてるのかわからんので教えてくれると嬉しいのだが…
0202199
NGNG例えば fib<1>::value だと
pow.cpp: In instantiation of `fib<1, 1, 0, 1, 0>':
pow.cpp:27: instantiated from here
pow.cpp:16: warning: enumeral mismatch in conditional expression: `fib<0, 1, 0,
1, 1>::<anonymous enum>' vs `fib<0, 1, 1, 1, 0>::<anonymous enum>'
ってかんじです。0 + があればなにも出ません。
g++ (GCC) 3.3.3 [FreeBSD] 20031106 です。
>>201
(fib(n+2)) = (1 1)(fib(n+1))
(fib(n+1)) (1 0)(fib(n))
なので、
(1 1)
(1 0)
のn乗を考えればいいですよね。ずれてたらすいません。
0203デフォルトの名無しさん
NGNGenum は暗黙のうちに整数型に変換できる。したがって 0 + をつけると
0 + enum値 が整数型となって、value の定義は
enum { value = 整数型 };
となる。これは全く問題ないコードだよね。
いっぽう 0 + をつけないと
enum { value = 別の無名enum型 };
となる。これだと左辺の value の型と右辺の enum 型が、別々の
型だと認識されて警告出てるんじゃないかなぁ。C++ の規格が
どうかは知らんけど。
0204199
NGNG例えばこんなコードは warningでません。
template <int N>
struct test {
enum { value = test<N-1>::value };
};
template <>
struct test<0> {
enum { value = 99 };
};
先に templateが展開されてから型チェックされてるんじゃないんですかね。
三項演算子の後ろ二つが両方テンプレートクラスの enumだと warningでるみたいです。
片方が整数だったり整数との演算をしてると大丈夫みたいです。
0205199
NGNGすると駄目みたいです。static const int にすれば大丈夫でした。
0206sage
NGNGしかし、書けるからといって再帰的な定義式をそのままプログラムにするのは
どうかと思う。
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNG何故?
0209デフォルトの名無しさん
NGNGコンパイル時にメモリ足りなくなった
0210デフォルトの名無しさん
NGNGオレもなった時あるなぁ。
つか、そういう小細工しても、うまいこと最適化かけられないのか
普通にfor書いた方が速度速くなったこともある。
それ以来あんまりやってね。
0211デフォルトの名無しさん
NGNG売り物にしようとするとなぁ。
俺はそんなコード書いてもアセンブル結果を全く想像できないしな。
0212デフォルトの名無しさん
NGNGinlineに頼って再帰?
0213デフォルトの名無しさん
NGNGこんなかんじ
#include <iostream>
template<int n> struct loop;
template<>
struct loop<0> { static void iter() { std::cout << "hoge 0" << std::endl; } };
template<int n>
struct loop {
static void iter()
{ std::cout << "hoge " << n << "\n"; loop<n - 1>::iter(); }
};
int main()
{
// for (int i = 4; i >= 0; --i) std::cout << "hoge " << i << "\n";
loop<4>::iter();
return 0;
}
0214デフォルトの名無しさん
NGNGコピーコンストラクタはアロケータオブジェクトをコピーしてくれるものの
operator=は、アロケータオブジェクトをコピーしてくれないようなんですが
なぜ?
0215デフォルトの名無しさん
NGNG20.1.5 -4- かな?
0216デフォルトの名無しさん
NGNGiterがキモイ
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG程度問題が、それなりには。
0219デフォルトの名無しさん
NGNGさんくす。
こういうのにはテンプレートよりプリプロセッサなのかな。
0220デフォルトの名無しさん
NGNGループ回数引数にしてさ。
0221デフォルトの名無しさん
NGNGそれだと展開できないだろ!
0222デフォルトの名無しさん
NGNGC/C++のマクロは再帰的に展開できないよ。
m4だったら出来るけどね。
0223デフォルトの名無しさん
NGNGそこで Boost の preprocessor ライブラリですよ。
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGそこまでして無理やりtemplateなんて使う意味あるの?
メタプログラムならbison++使うとか。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGpreprocessorは多用されてるけど、ほとんど可変個引数のエミュレート用だし。
0229デフォルトの名無しさん
NGNG一般のプログラミングで、sh/awk/perl/C++ をそれぞれ使い分けるのと同じ感じで、
テンプレートでできるとしても、考え方もコーディングもすごく難しいでしょ?
素直に考え付かないっていうか。
0230デフォルトの名無しさん
NGNGみんなで見るような部分に入るようになると困るよな。わかってもらえるか心配だし。
0231デフォルトの名無しさん
NGNG同意・・・templateを応用する本読んでいると頭痛くなってくる。
特に他人と共有するコードの場合、そこまでして使う価値があると
思えない。
0232デフォルトの名無しさん
NGNGプロジェクトの人間が皆templateを深く理解してるわけもないしな
オレモナー
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG頼むから、メタプログラム、式テンプレートあたりをわかりやすくレクチャしてくれい。
ってかして下さい mOm
0236デフォルトの名無しさん
NGNG理解する前にあんなもんっていうのは負け惜しみみたいで嫌ジャン。
0237デフォルトの名無しさん
NGNGもっと簡単に、わかりやすくならないもんかね。
0238デフォルトの名無しさん
NGNGまあそれはそうだけど、仕事となると保守可能要員が減る
ことをわかってて書くほうがタチ悪いわな・・・
0239デフォルトの名無しさん
NGNGETの特別版
http://www.amazon.co.jp/exec/obidos/ASIN/B00005R22Y
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG> MPは代替手段がある
あるの?
0242デフォルトの名無しさん
NGNG「テンプレートとかわかんないし〜」とか言う馬鹿を相手にしなくて済むし。
0243デフォルトの名無しさん
NGNG関数を大きくしないとか、そんなレベル。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGET: Expression Template
0246デフォルトの名無しさん
NGNG後者は自転車で空を飛べるようになるライブラリ。
0247デフォルトの名無しさん
NGNG× Metha
○ Meta
0248デフォルトの名無しさん
NGNG× Metha
○ Metya
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG実装してるような気がするな。ほとんど魔法だし。
普通のプログラミング言語みたいな表記で出来た方が素直だと思う。
きちんとやろうとすると C++ の仕様と密接に関わってくるから難しいかもしれないが。
0252デフォルトの名無しさん
NGNGなぁ、あんた>>237か?
> メタプログラミングは template じゃなくても可能
ここらへん、ちょっと例でも挙げながら解説してみてくれないか?
0253デフォルトの名無しさん
NGNG251 じゃないが、プロプロセッサメタプログラミング、ならびにコードジェネレータ
(bison++ とか) を使ってのメタプログラミングがあるね。
無条件にテンプレートメタプログラミングからの乗り換えを推奨できる代物じゃ
ないが。というか、テンプレートメタプログラミングの方がマシっつー場面が
多いと思われ。
0254デフォルトの名無しさん
NGNGバイナリ200KBも大きくなった。
いや便利なんだけど。
0255デフォルトの名無しさん
NGNGstruct List
{
MYTYPE x1, x2, c3;
List * prev;
List * next;
};
そもそも、発端は、この程度のことだったんだよな。
0256デフォルトの名無しさん
NGNG環境によるだろ。
オプションを変更して、極力ランタイムを使用するようにすれば
使っても使わない時と比べ10octetほどしか増えない。
0257デフォルトの名無しさん
NGNG251 じゃないが、C++でなくていいならCLOSとか。
Adaのpackage、MLのmoduleなんかも。
しかしC++のはCLOSに続いて強力だねえ。
コンパイル時ということになれば、研究用の言語は除いて最強か。
0258デフォルトの名無しさん
NGNG(略
0259!=252
NGNG横槍ですが、CLOSにしろAdaにしろちょっと調べてみた限りでは
C++のtemplateとの違いはキーワードの違いでしかないような
気がしたんですがそんなことない?(template==defgeneric ?)
さらにAdaは特殊化できないからMPは厳しいみたいな記述も..。
0260デフォルトの名無しさん
NGNGパース後のデータ構造もツリーでもいいけど。)が見れるといいな。
Cで言えば、定数演算とインライン関数の展開された後のソースが
見れるような感じというか。
0261デフォルトの名無しさん
NGNGOpenC++ってのがあるけど。
http://www.csg.is.titech.ac.jp/~chiba/openc++.html
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGコンパイル時ですべてが決定するわけだから、型部分をエディタでちょいちょいと置換
するのと大差ないって説も・・・
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG君はC/C++でプログラムする時にマクロを利用することを禁止する。
ちょいちょいと置換したまえ。痴漢じゃないよ(欝
0266デフォルトの名無しさん
NGNG結局実行ファイルが欲しいだけなんだから、実行ファイルをバイナリエディタでちょいちょいと
書くのと大差ないって説も・・・
0267デフォルトの名無しさん
NGNGコードジェネレーターでもいいんだろうけどね
0268デフォルトの名無しさん
NGNG昔あった
#define begin {
#define end }
と同じか?
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNGと書く代わりに
begin end
で4倍複雑だ。
0271デフォルトの名無しさん
NGNGこれから変数は一文字にしよう…
0272デフォルトの名無しさん
NGNGKVMじゃないんだから……
0273デフォルトの名無しさん
NGNG本来は複雑なものをシンプルに実装するための仕組みだし。
複雑なものを実装することも出来るけど、それはテンプレートとはまた別の話。
0274デフォルトの名無しさん
NGNGいいのでしょうか?
こんな感じ
{
std::vectordata_vec;
...あんなことやこんなこと...
func( &data_vec[0] , data_vec.size() );
}
func( &data_vec.front() , data_vec.size() );
こっちでもよさそうだけど、[0]の方が、vector::front知らない人には分かりやすそげ。
現在うまく行ってるけど
vectorのメモリが連続するっていうのは保証されているのですか?
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG書くのまんどくさいから、vector使ってるんですが
駄目ですか?
0277デフォルトの名無しさん
NGNG保証されてる
0278デフォルトの名無しさん
NGNG例外安全性とかまで考えるとそういう理由もいいんでないの
ていうか>>274と>>276はどちらも今すぐEffective STL嫁って感じの質問だな
0279デフォルトの名無しさん
NGNG23.1.1にも23.2.4にもそんな事書いてないけど?
0280デフォルトの名無しさん
NGNGいろんなとこで話に上るけど
0281デフォルトの名無しさん
NGNGISO/IEC 14882-200 には 23.2.4 に次の追記がなされている。
The elements of a vector are stored contiguously, meaning that if v is a
vector<T, Allocator> where T is some type other than bool, then it obeys
the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
そろそろ古い規格書は捨てちゃえ。
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/9693
このあたり嫁。
0285デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/9693
このあたり嫁。
0286デフォルトの名無しさん
NGNGそんなに記述量かわるわけでもあるまいし。
0287デフォルトの名無しさん
NGNGポインタで要素に自在にアクセスしたい場合や
速度がほしい場合はvectorは避けるようにしてるかな。
0288デフォルトの名無しさん
NGNGポインタで要素に自在にアクセスしたい場合や
速度がほしい場合はvectorは避けるようにしてるかな。
0289デフォルトの名無しさん
NGNG強いて言うならリサイズの必要が全くなければboost::*_arrayを検討する程度。
0290デフォルトの名無しさん
NGNGvectorを避ける理由にまったくなっていない。
0291デフォルトの名無しさん
NGNG>>1にもそう書いてあるはず。
0292デフォルトの名無しさん
NGNG#include <loki/Typelist.h>
#include <iostream>
class A {
public:
A( void ) { std::cout << "A" << std::endl; }
};
typedef TYPELIST_1( A ) TLA;
template< typename X >
class Show {
private:
Loki::TL::TypeAt< X, 0 >::Result a;
public:
Show( void ) : a() {}
};
int main( void ) {
Show< TLA >();
return 0;
}
0293デフォルトの名無しさん
NGNG別にvectorを採用しなければならない理由はまったくない。
0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNGただし、配列ごときでvectorなんていうまどろっこしいtemplate使う奴は、単なる馬鹿。
0296デフォルトの名無しさん
NGNGなんでこのスレを読んでるのかと……
別に 295 が template 使わないのは構わんが、それを布教するなら
他でやった方が良いと思うぞ
0297デフォルトの名無しさん
NGNG可変長配列でもvector使わないの?
0298デフォルトの名無しさん
NGNGこの時点でSTL分からない奴なんだなーというのがバレバレなんですが
0299デフォルトの名無しさん
NGNGrealloc使え
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG可変長配列ごときでreallocなんていうまどろっこしい関数使う奴は、単なる馬鹿。
0302デフォルトの名無しさん
NGNG決め付け厨登場
0303デフォルトの名無しさん
NGNG>ただし、配列ごときでvectorなんていうまどろっこしいtemplate使う奴は、単なる馬鹿。
禿げしく同意
0304デフォルトの名無しさん
NGNG・割り当てたメモリを(1回だけ,正しいサイズで)開放しなければならない,
という責任を負わなくて良い
・配列のサイズに対する一貫性の責任を負わなくて良い
・例外安全性に対する負担が大幅に少ない(一般に例外安全性に対する
認知度が低いので,このことが(゚д゚)ウマーに思われないことが多い.残念)
・アルゴリズムとの親和性が高い(一般にアルゴリズムの認知度が低いので,
このことが(゚д゚)ウマーに思われないことが多い.残念)
自分が思いつく動的配列に対するvectorの弱点
・vectorの方が常に1, 2ワードほど余計にメモリを使う
・vectorは最大で2倍(実装によっては異なるが,多くは2倍)余計に
メモリを使う可能性がある(ただしswap idiomによるshrink to fitで解消できるとされている)
0305デフォルトの名無しさん
NGNGMPのループ展開についてなんだが、
あれってなんのメリットあるの?
コンパイル時でなく実行時にループするんだから
結局なんのメリットもないような気がするんだが。
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGコンパイル時にループを展開してしまえば、実行時に
1. ループ変数をインクリメント
2. ループ変数がループ終了条件に達しているかチェックして、条件分岐
という命令を省ける。特に最近のパイプライン化された CPU だと、後者の
条件分岐が重い命令なので、これを省けると実行時効率がグッと上がる
可能性がある。
0308デフォルトの名無しさん
NGNG- Loki::TL::TypeAt< X, 0 >::Result a;
+ typename Loki::TL::TypeAt< X, 0 >::Result a;
3.3.3ではこれで通る.
0309305
NGNG>コンパイル時にループを展開してしまえば、実行時に
>1. ループ変数をインクリメント
>2. ループ変数がループ終了条件に達しているかチェックして、条件分岐
>という命令を省ける。特に最近のパイプライン化された CPU だと、後者の
>条件分岐が重い命令なので、これを省けると実行時効率がグッと上がる
>可能性がある。
あっ、そういうことでつか!!
それで納得できますた。ありがとう(・∀・)
0310デフォルトの名無しさん
NGNG安易に納得しないほうがいい。
ループアンローリングによって高速化するのは極めて稀。
適用できる場面を探すほうが難しい。
それにアンロールできるような単純なループなら条件分岐の実行時間は実質0。
むしろ下手にアンロールするとコードサイズの膨張によってキャッシュの効率が低下、
その結果としてかえって遅くなるのが関の山。
0311デフォルトの名無しさん
NGNG>・アルゴリズムとの親和性が高い
なんじゃ?こりゃ?
FFTのアルゴリズムと親和性が高いかい?
Berlekamp-Massey アルゴリズムといったいどこが親和性が高いんだ?
それともKalman Filterアルゴリズムと親和性が高いのかい?
いずれも何の相関性もない。
いったい何のアルゴリズムをいってるんだ?
0312デフォルトの名無しさん
NGNGまあ、あれは配列にも適用できるんだが。
0313デフォルトの名無しさん
NGNGソートしたりカウントしたりといった。FFTも理解できん9図ガキでもわかるC++のアルゴリズムのことか
0314デフォルトの名無しさん
NGNGカルマンフィルタってアルゴリズムか?
0315305
NGNG307さんもパフォーマンスアップの「可能性がある」
という書き方ですが、場面を考えないといけないんでつね。
c++ templateは良い本ですがそこまで踏み込んで
書いてくれていませんね。でもアンロールがあまり役に
立たない可能性があると、ETとかはより一層場面を考えて
使わないといけないような気が。。。
0316デフォルトの名無しさん
NGNGmean square error を最小にするように Kalman gain を決定する算法そのものを
Kalman filter algorithmと言うんだよ。
大体、algorithm っていうのは算法、解法とか、手順のことを言うの。
STLのalgorithmなんて解法には値しない低レベルなもの。
0317デフォルトの名無しさん
NGNGそれにソートなんて単純に見えて相当奥が深いぜ。
0318デフォルトの名無しさん
NGNGフィルタというと工学屋にとってはろ波機構を意味する。
工学の場合、化学屋のいうフィルタも、電気屋のチェビシェフ/バタワース/FIR/IIRも
みーんなろ波機構。カルマンフィルタも雑音がある場合の状態変数推定機構。
ちょっと意味合いが異なるのが、数学屋とか経済屋のいう情報の増大機構そのもを
をフィルタという場合。これは表現上すごく紛らわしいし、情報の増大系とろ波機構
はきちんと区別するべきと主張したいのだが・・・
0319デフォルトの名無しさん
NGNG>それにソートなんて単純に見えて相当奥が深いぜ。
そんなに奥が深くて、評価や実装が難しいものなら標準化なんかしない。
簡単で、皆がよく使うものだから。標準化して用意してるんだよ。
0320デフォルトの名無しさん
NGNGお前はいまFFTを理解していない人間全てを敵に回した!
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG理解できなきゃ人間やめろ。
0323デフォルトの名無しさん
NGNGFFTぐらい理解してても何の自慢にもならないが、理解できなきゃ恥だな。
っていうより、理解できないことをここでわざわざ主張しなくてもいいってば。
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG"スレ違い!"
と叫ぶのを待ってるわけなのだが。
0327デフォルトの名無しさん
NGNG0328317
NGNGSTLに限らずアルゴリズム一般の話をしてたんだが。
まあSTLに限ってもソートは
皆がよく使うものだからというのは同意だが
簡単だからというのは同意しない。
パフォーマンスを出すには複雑になるから
標準化して用意されているんだ。
0329デフォルトの名無しさん
NGNG溜まってるのでソープにでも行ってくるわ。
0330デフォルトの名無しさん
NGNG>パフォーマンスを出すには複雑になるから
>標準化して用意されているんだ。
お前の頭ではソートごときでも複雑なんだろ。
お前には下僕プログラマがちょうどお似合い。
それ以上複雑なアルゴリズムは理解できないことを保証する。
0331デフォルトの名無しさん
NGNGください。charは型的にはsigned charでもunsigned charでもないので下のやつ
では駄目でした。
template<class T> class CharTest;
template<> class CharTest<unsigned char> {};
CharTest<char> ctc;
0332デフォルトの名無しさん
NGNG>簡単だからというのは同意しない。
使い手の手の加えようのないぐらいすでに評価が定まってるから標準化してるんだよ君。
0333331
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG周りの人から見放されてないか心配だ・・・2chだから吠えてるだけですよね・・・
0337デフォルトの名無しさん
NGNGBOOST_STATIC_ASSERT(!std::numeric_limits<char>::is_signed);
こんな感じでどう?
0338デフォルトの名無しさん
NGNG外部仕様がシンプルなのと、実装がシンプルなのは話が全く違うわけだが。
UNIX なんかシステムコール 100 のオーダーしかなくて見た目はシンプルだが、
効率の良い実装を提供しようと思ったら大変だろ。
ソートアルゴリズムも「ソートする」という外部仕様は単純でも、それを汎用性が
高くかつ、そこそこ性能が出て、しかも例外安全な形で実装しようとなると、
いろいろめんどいワケだ。
まぁ、別に 332 が STL のソートアルゴリズムを評価しないのは構わんが、
その評価を他人に押しつけるのはヤメれ。ここは template 統合スレなんだし、
template 使わないなら余所で議論してくれよ。
0339デフォルトの名無しさん
NGNG彼は人間関係が築けなくても生きていける学生か研究者
ではないかと思われるわけだが
0340デフォルトの名無しさん
NGNG単なる無職ひきこもりだろ
0341デフォルトの名無しさん
NGNGインスコの順番はこの順が良いってのあります?
boostのインストールオプションでSTLportなんたらがあるようなので
STLportの方が先の方が良さそうですが
環境はWinXP pro + VS.NET2003です
0342デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNGhttp://www.mit.edu/people/zhzhu/pfft.html
0345デフォルトの名無しさん
NGNG気づきませんでした。何処を見たら気づけたのでしょうか?
0346デフォルトの名無しさん
NGNGttp://tt.sakura.ne.jp/~suzu/template/typename.html
0347308
NGNG> 気づきませんでした。何処を見たら気づけたのでしょうか?
何となく.付けてみたら通った.(笑)
g++は3系列になるときにtypenameを要求されることが多くなった気がする.
(2系列がいい加減だったんでしょけど.)
それで付けてみた.
>>346
良いページですね.
0348デフォルトの名無しさん
NGNGFAQをみるとboostは下位互換性がいつも保たれてるわけじゃないので、
プロジェクトごとにboostのバージョンを固定して使うようにとあります。
みなさんはプロジェクトとboostのバージョンの対応ってどうやって管理してますか?
こんな感じですか?
方法1:
プロジェクトごとにどのboostバージョンを使っているかコメントに書いておき、
マシンにバージョンのちがう複数のboostをいれて切り替えて使う。
方法2:
(゚ε゚)キニシナイ!!
0349デフォルトの名無しさん
NGNG> プロジェクトごとにどのboostバージョンを使っているかコメントに書いておき、
コメントではなく Makefile に書いてる。インクルードパスとライブラリの検索パスを
プロジェクト毎に設定すれば良いだけ。
0350デフォルトの名無しさん
NGNG逆にVC7.1は頭が良すぎてtypenameを付けなくてもエラーが発生しない場合が
多いので、VC7.1を多用されている時は気をつけよう。
0351デフォルトの名無しさん
NGNGVC7.0 は、の間違い。VC7.1 は typename でエラー出すようになってるよ。
0352デフォルトの名無しさん
NGNGいや、VC7.1の場合だ。間違いではない。もうしょっちゅう経験している。
0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNGlokiのSingleton.hのここの部分で、
Throwerは定義されてません,とかエラーでるんだけど俺だけ?
throw std::logic_error("Dead Reference Detected");
のコメントはずして、Throwerをコメントすれば、コンパイルできるんだけど。
なんで、vc6用なのにコンパイラ通らないのか、謎なもんで。
namespace Loki{ namespace Private {
namespace{
void Thrower(const char* s) {throw std::logic_error(s); }
}
struct DefaultLifetime {
template <class T>
static void OnDeadReference(const volatile T* p = 0 ){
// the throw will yield a C1001-internal compiler error.
// The new level of indirection solves the problem
// throw std::logic_error("Dead Reference Detected");
Thrower("Dead Reference Detected");
}
};
}]
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNGsourceforgeのLokiとLokiPortのどっちか片方だけで良いの?
それとも両方?
0357デフォルトの名無しさん
NGNGVC は、6, 7.0, 7.1 でまったく別モノだから、バージョンも書け。
たぶん sourceforge 版に取り込まれているとは思うけどな。
0358354
NGNGhttp://www.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6SP6.asp
何か重要なものが変更されてたような気がしたが、まぁ気にしないでぶちこんでみた。
最適化まわりのバグがなくなって、変わりになにかがつかえなくなったような・・・。
アセンブラがつかえなくなったんだっけ?つっこみきぼんぬ。
0359354
NGNGの部分、Privateのネームスペースかかってない。
namespace Loki{ /*略*/ }
に訂正。
てか、開発者はなんでコンパイルとおるんだ?vc6つかってない?
0360デフォルトの名無しさん
NGNGThrower("Dead Reference Detected");
↓
Loki::Thrower("Dead Reference Detected");
で良かったような気がする。
0363356
NGNG> VC は、6, 7.0, 7.1 でまったく別モノだから、バージョンも書け。
これは失礼した
6, 7.0, 7.1全部インスコしてあるけど使ってるのは7.1
> たぶん sourceforge 版に取り込まれているとは思うけどな。
あらそうなん
ソースホゲとポートVC7の両方落としてみたんだけど
片方にあって片方にないファイルがあったんで
どうなんだろうと思って
0364デフォルトの名無しさん
NGNGコード生成について結構致命的なバグが直っている。(必ず発生するものではないが)
それよりもIDEのバグが直ってるのが重要だと思うがな。
無くなったのはProcessorPack。
最新CPU対応したければとっととVC.NETにアプグレ汁ってことだな。
そうでなくても乗り換えた方がいいと思うがな。
0365デフォルトの名無しさん
NGNGVC7.1でインクルード関連が良くわかりません。
どなたかご教授お願いします。
http://cgi.f20.aaacafe.ne.jp/~tori/html/upboard/updir/CStack3.lzh
ちなみにこれはソースのデバッグはまったくやってない闇コードです。
0366デフォルトの名無しさん
NGNG>VC7.1でインクルード関連が良くわかりません。
ってどうわからないのかはわからないけどそれ以前の問題が大杉の気が
・ヘッダからcppをインクルード
・BOOLにtrue/falseを使ったり
・if forの後に空白がない
・「 { 」の前にも空白や改行がない
・なぜスタックにheightとwidthが出てくるのか
0367デフォルトの名無しさん
NGNG>・「 { 」の前にも空白や改行がない
これはどうでも良くないか?
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG具体的にはstruct Bをテンプレートにしないで
以下のようなものをコンパイルしたいです
template<class T> struct A{};
struct B
{
typedef A atype;
};
int main()
{
typedef B::atype<char> atype;
return 0;
}
0370デフォルトの名無しさん
NGNG> 以下のようなものをコンパイルしたいです
とりあえずそれだけなら。
template<class T> struct A{};
struct B
{
template<typename T> struct A { typedef ::A<T> type; };
};
typedef B::A<char>::type atype;
で、これで「テンプレートの実体化を遅らせる」ことになるの?
0371デフォルトの名無しさん
NGNG言っていることはよくわからんが、これでいいか?
template<class T> struct A {};
struct B
{
template<class T> struct atype {typedef A<T> type;};
};
int main()
{
typedef B::atype<char>::type atype;
return 0;
}
0372デフォルトの名無しさん
NGNG0373369
NGNG0374デフォルトの名無しさん
NGNGstruct A
{
typedef typename T type;
};
template<class T>
struct B: boost::mpl::if_< typename boost::is_base_and_derived<B,T>,typename A<T>,typename A<B> >::type
{
};
struct C: B<C>
{
};
struct D
{
};
int main()
{
cout << typeid(C::type).name() << endl;
cout << typeid(B<D>).name() << endl;
}
実行結果:
struct B<struct C>
struct B<struct D>
一行目はstruct Cとだけ表示されるべきなのですがうまくいきません
is_base_and_derivedがうまくいってない感じなのですが、何か間違っているところとかありますか?
環境はboost1.31.0でVC7.1です
0375デフォルトの名無しさん
NGNG> struct C: B<C>
このB<C>のインスタンス化の時点でCが不完全なんだろう。
後は、前スレの145,169-172あたり見れ。
0376デフォルトの名無しさん
NGNG定義してiteratorを使用しての参照ができないんですが
どのようにしたらいいのですか?
typedef struct
{
int nNumber
}hoge;
int main()
{
std::vector<shared_ptr<hoge> > vspHoge;
shared_ptr<hoge> spHoge(new hoge);
spHoge->nNumber = 1;
vspHoge.push_back(spHoge)
for(std::vector<shared_ptr<hoge> >::iterator it = vspHoge.begin(); it<vspHoge.end(); it++)
{
cout << it->nNumber <<, endl; //これでエラー
}
for(int i = 0; i <vspHoge.size(); i++ )
{
cout << vspHoge[i]->nNumber <<, endl; //これならうまくいく・・
}
}
0377デフォルトの名無しさん
NGNG(*it)->nNumber
0378デフォルトの名無しさん
NGNGあっさり通りました・・・
ありがとうです。
0379デフォルトの名無しさん
NGNGtemplate<
class AbstractProduct,
typename IdentifierType,
typename ProductCreator = boost::shared_ptr<AbstractProduct>(*)(),
class FactoryErrorPolicy = Loki::DefaultFactoryError >
class SharedFactory
: public FactoryErrorPolicy
{
//略
boost::shared_ptr<AbstractProduct> CreateObject(const IdentifierType& id)
{
typename IdToProductMap::iterator i = associations_.find(id);
if (i != associations_.end())
{
return (i->second)();
}
return OnUnknownType(id, Loki::Type2Type<AbstractProduct>());
}
//略
};
こんなんしてみたけど、もっといかしたファクトリーないんかいな?
0380365
NGNG>366
レスThx!
手を抜いてると幾つか問題が出ちゃうね。
精進します。
あと、質問はすれ立てるまでもないすれに移動します。
ありがとうございました。
0381デフォルトの名無しさん
NGNGbool CStack<T>::Push(T in)でif((alloced*maxlen)<=used)って言うのがあるけど
usedはコンストラクタで0にした後、Createでも何もされていないから絶対に条件は成立するんじゃないか?
0382デフォルトの名無しさん
NGNGVC++7.0+STLport-4.6.2+boost-1.31.0でregexのビルドに失敗します。
・STLportの構築
stlport/stl_user_config.hは特に変更せずにsrcでnmake -f vc7.mak
・boostの構築
libs/regex/buildでnmake -f vc7-stlport.mak STLPORT_PATH=STLportのパス
以上の方法でやると、boost_regex-vc7-mt-p-1_31.dllのリンク中に
winstances.obj : error LNK2019: 未解決の外部シンボル (長すぎて書き込めないので略)
のようなエラーが大量に出てリンクに失敗します。
エラーメッセージ内に全部wchar_tが出てるようなので
/Zc:wchar_tのオプションが怪しいと考えています。
どなたか原因のわかる方はいますか?
0383デフォルトの名無しさん
NGNGスタティックリンク版はコンパイルできてもダイナミックリンク版は
通らないみたい。ので、スタティックリンク版を使ってます。。。
0384デフォルトの名無しさん
NGNGそこ、いちばん省略しちゃいけないとこだと思うんだけど。
> /Zc:wchar_tのオプションが怪しいと考えています。
とりあえず、STLportのビルドboostのビルドで食い違ってたら駄目だろうな。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNGそれを解決するには(長すぎて書き込めないので略)
0387デフォルトの名無しさん
NGNGのエラーが大量に出ます。自前のクラスなら大丈夫なんですが、原因が分かりません。
使い方が間違っているのでしょうか。環境はVC7.1+boost1.31.0です。
#include<string>
#include<vector>
#include<boost/lambda/lambda.hpp>
#include<boost/lambda/bind.hpp>
struct TEST{
int hoge(int i){
return i;
}
};
int main(int argc, char **argv){
using namespace std;
using namespace boost::lambda;
vector<TEST> vt(10);
vector<string> vs(10);
//自前のクラスなら、大丈夫
remove_if(vt.begin(), vt.end(), bind(&TEST::hoge, _1, 2) == 1);
//'a'が含まれてる要素を削除 ここで大量のエラー
remove_if(vs.begin(), vs.end(), bind(&string::find, _1, "a") != string::npos);
return 0;
}
0388デフォルトの名無しさん
NGNGstd::string::find はオーバーロードされたバージョンがあるから。
メンバ関数の型を明示して、一回関数ポインタを取ってから、そいつを
bindに渡せば行ける…はず。
std::string がテンプレートバキバキだからメンドイから試してないけど。
# しかも find って第二引数が実はデフォルトで 0 だし。
他に何か解決策あるんかな?あるなら俺も知りたい。
0389デフォルトの名無しさん
NGNGレスthanks。確かにオーバーロードされてると、どのfindか分からないね。
で、findのポインタを取ってみようと思ったんだけど、これがなぜか通らず。
string::size_type (string::*p_find)(const string&, string::size_type);
まあいいか。こういう場合は素直に関数オブジェクトにした方がいいな。
0390デフォルトの名無しさん
NGNGstring::size_type (string::*p_find)(const string&, string::size_type) = &string::find;
0391デフォルトの名無しさん
NGNGstring::size_type (string::*p_find)(const string&, string::size_type) const = &string::find;
0392デフォルトの名無しさん
NGNGあ!通った。ありがとう。
typedef展開したり小一時間いじくってた・・・
これでいける。
string::size_type (string::*p_find)(const string&, string::size_type) const = &string::find;
remove_if(vs.begin(), vs.end(), bind(p_find, _1, "a", 0) == string::npos);
0393デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4798007862/249-0609019-0421111
みんな読んだ?
次はboostの実装技術の本お願いします、Modern C++ Designを超える奴をぜひ>稲葉先生
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG遅いかもだけと、Traitsにしちゃうってのはどうでしょうか
template <typename T>
struct Product
{
typedef T* type;
};
template <typename T>
struct Product<boost::shared_ptr<T> >
{
typedef boost::shared_ptr<T> type;
};
Product<AbstractProduct>::type CreateObject(const IdentifierType& id)
{
//
}
これがいやならAbstractProduct::ProductReturnTypeとか
AbstractProduct自身をTraitsに。
0396デフォルトの名無しさん
NGNGtypename ProductCreator = boost::shared_ptr<AbstractProduct>(*)(),
の部分は
typename ProductCreator = boost::function<Product<AbstractProduct> ()>
ってやっとけば何でも入っていいかも。遅いかもしれんけど
0397デフォルトの名無しさん
NGNG連書きすまそ。
typename ProductCreator = boost::function<Product<AbstractProduct>::type ()>
0398379
NGNGいえいえ、どうもありがとうございますです。
なるほど、boost::functionはいいっすねぇ。
そういえば、デフォルトのままだと、AssocVectorを動的確保すると落ちるから
std::mapに変えるはめになったよ・・・。
0399デフォルトの名無しさん
NGNGよく調べずにamazonで買ったが、かなりがっかりする内容だね。
もうちょっと深さを期待してたんだが。学生が書いたらこの程度だろな。
こんな本の執筆で金儲けする前にもうちょっと学業に精出せよ。ったく。
大体ライブラリを作ったわけでもないのに、exampleとこの程度の解説するだけで
これを人のふんどしで相撲を取る典型だな。
人のふんどしで相撲を取る==boostの糞解説本書いて金もうける
0400デフォルトの名無しさん
NGNGblitz++ か ublas の式テンプレートのディープなところの解説本でも書いてくれよ。
-->稲葉大先生
0401デフォルトの名無しさん
NGNGそんなことはないぞ、纏まったペーパーベースのリファレンスは現在これしか無いだろ。
boostはまだ現状ごった煮ライブラリだから、しっかりしたドキュメントは無いわけで貴重だと思うけどね。
0402デフォルトの名無しさん
NGNGおおっと!ご本人さんのご登場です。
0403デフォルトの名無しさん
NGNGまぁ確かに深さは無かったかもしれんが、イキナリそんなにディープだったら
そっちの方がむしろビックリかと。
0404デフォルトの名無しさん
NGNGホームページに行けば、ちゃんとexampleを載せた解説が出来上がってまんがな。
稲葉はこの印税を100%自分の懐にしまいこむつもりじゃねぇだろうな?
ふんどしだけ人のを使っても、相撲をとるなら立派なもんだが、
相撲を取ってるわけじゃないからな。
行事が懸賞金わたすときにどこからか現われて掠め取るに近いだろ?
0405デフォルトの名無しさん
NGNGboost作った奴らがあがりよこせと言ってきたらどうするんだろね。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNGそんな方向で盛り上がるなよ。
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGアフォか。んなこというとC++の解説書書いてるやつらもみんな同罪だろ。
0410デフォルトの名無しさん
NGNGboost本は特定の処理系に関する解説に近いな。
gccの解説とかな。
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG気に入らないね。直接努力してるboost クリエイタに一銭も行かないのは大問題だ。
0414デフォルトの名無しさん
NGNGBoost本の内容の薄さは別として。
0415デフォルトの名無しさん
NGNGそれが問題なんだよね。内容が濃ければ人のふんどしとは誰も言わない。
0416デフォルトの名無しさん
NGNGそういうライセンスで作者が公開しているから問題は皆無。
413の「気に入らない」という気持は分からんでもないが、同意は全くできない。
0417デフォルトの名無しさん
NGNGおおっと。ご本人さん。
ご自分の利権主張にはご熱心で抜け目ないね。
0418デフォルトの名無しさん
NGNG別にお前に同意いただかなくとも全く結構だから、安心しな。
0419デフォルトの名無しさん
NGNGAmazonでかった?だったら返品すればいいだろ。
0420デフォルトの名無しさん
NGNG内容の論評だけにしとけ。見苦しい。
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG自己弁護は自分のホームページだけにしとけ。見苦しい。
0423デフォルトの名無しさん
NGNG>>421
無理。
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGあの本の著者に個人的な恨みがある奴が今いるのか?
0428デフォルトの名無しさん
NGNGとか言うと本人扱いされそうな悪寒
0429アンケート
NGNG・よかったと思う人の数-->
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGお前脳のMRIでも撮影してもらえ、そんなことは誰も言ってない。
0432デフォルトの名無しさん
NGNG>とか言うと本人扱いされそうな悪寒
と言えばごまかせると思ってる時点でマヌケなんだよ。
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNG愚痴なら自分の日記にでも書いとけ。
0436デフォルトの名無しさん
NGNGamazonの一ヶ月も前に書かれたレビューにも
>また、本書の内容はBoostで提供されている機能説明であり、Boostの実装方法を説明しているわけではない。
>その為、Boostの概要を知りたい人には役立つだろうが、Boostの実装を紐解く為には利用できない。
って書いてあるのにな。
0437デフォルトの名無しさん
NGNGじゃあお前が書けよって感じだな(ぷっ
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNGライブラリも本も書けない奴らが自尊心を保つ為に仕方が無い事なのです。
せめてここでは愚痴を聞いてあげましょう。
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGただでさえ分厚いのに、これ以上分厚くなったら読みにくくてかなわん、実装についての解説書は別途欲しいよ。
0447デフォルトの名無しさん
NGNG機能と、サンプルソースとかぐぐるより早くたどりつくと考えれば
結構いいんじゃね? 漏れも買ったし・・・ orz
0449デフォルトの名無しさん
NGNGそれならBoost C++ library referenceにしろってんだよ。
Boost C++ library programming なんていう内容の深さを匂わせるような
名称はやめろってこった。
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGおまえが内容を確認しないで買うってのはもうわかったから駄々こねるな。
0453デフォルトの名無しさん
NGNGだから恥かしいんだよな。
0454デフォルトの名無しさん
NGNGBoost 本は1年でゴ(ry
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG駄本掴まされたやしがむしろバカ。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG本にするほどのもんでもないと思ってたな
0459デフォルトの名無しさん
NGNGでも、そんなことせずとも、ここでちゃんと解説されてる。
http://boost.cppll.jp/HEAD/libs/libraries.htm
0460デフォルトの名無しさん
NGNG正規表現のドキュメント古すぎ
0461デフォルトの名無しさん
NGNG単純に学習時間を短縮できるような本だってあってもいいはず。
0462デフォルトの名無しさん
NGNG日本語訳プロジェクトに参加した事もない癖に、つべこべ文句を言う資格は無し。
0463デフォルトの名無しさん
NGNGべつに文句は言ってないと思うぞ。本当のことを言っているだけで。
0464デフォルトの名無しさん
NGNG誰もてめーの欲しがる本のレベルや内容なんて知らねーんだよ。
そして駄本だと思ったらいつまでもぐだぐだ言うな。
紹介したけりゃ良書の紹介しろ。
0465デフォルトの名無しさん
NGNGそういうのを文句って言うんだ。頭冷やして出直せ。
0466デフォルトの名無しさん
NGNG誰かさんと違ってボランティアで翻訳やってるんだからよ。
フリーウェアに対しては文句言うな。
文句言えるのは有償のものだけ。
0467デフォルトの名無しさん
NGNGなぜだ?別に改善を要求してるわけじゃないだろ?
0468デフォルトの名無しさん
NGNGってことですかね。
メールでやれ
0469デフォルトの名無しさん
NGNG…。フリーウェアに対して文句が言えなくなったら、
その時点でそれ以上の発展は望めないよ。
あ、「ここはこうしたほうがいい」って言えば文句にはならないのかな…
翻訳者の皆様、いつもご苦労様です。
正規表現のドキュメントが古いようです。新しいモノに対応してくれると助かります。
って言い直す。
ちなみに、Boost本の正規表現の項目は新しいほうのもの。
これはすごい助かった。INABAさんありがと。
0470デフォルトの名無しさん
NGNG>>399のアマゾンでの評価は納得できるから、
>>399は身銭を切って本の評価をしてくれたと考えることもできる。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNGこの一連のレスをみれは、どうみても違うって、
稲葉叩いているのはboostを触った事も無いようなタコだろ
微妙におかしな論点になってるじゃん
おまえ才能もセンスも無いんだからプログラマは諦めろ >399
0476デフォルトの名無しさん
NGNGオリジナルの英語の外仕読んで使い方のわからんカスがboost なんか使うな。
お前みたいなアフォが居ると周りのものが迷惑するんだよ。
0477デフォルトの名無しさん
NGNGというか俺には>>399が書いたって言うのは嘘だとしか思えんのだが?
0478デフォルトの名無しさん
NGNGはいはい、気がすんだら首つって死んでろ
0479デフォルトの名無しさん
NGNGお前は5階から中学生に突き落としてもらえ。
0480デフォルトの名無しさん
NGNGわかったから、age んな
0481デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1085915001/
この辺でやってくれ。お似合いだから
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG普通、邦訳ドキュメントが古いと思ったら英語であればオンラインの原文読むだろ。
それを本が出版されるまで待ってること自体、お話にならんな。どんな仕事してるんだ?
0484デフォルトの名無しさん
NGNGフリーウェアに対して許されるのは依頼だけ。
文句は許されない。嫌なら使うな。読むな。
文句言う奴がアフォ
0485デフォルトの名無しさん
NGNGただいまスレ違い甚だしいレスが続いておりますがご了承ください。
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNG阿呆やなぁ。
Boost の裾野を広げるには日本語で十分な Document があることは必須やろ。
あと、
> それを本が出版されるまで待ってること自体、お話にならんな。
って、>>469 のどこをどう読めばそういう解釈になるのやら。
つーか、ここは /. の出張所ですか?
0488デフォルトの名無しさん
NGNG何勘違いしてるか知らんが、boostの裾野なんか広げる必要は全くないね。
使いたい奴が自分の能力に合わせて使えばいい。くだらんライブラリも実際あるしな。
布教活動でもしたいのかい?
0489デフォルトの名無しさん
NGNG>って、>>469 のどこをどう読めばそういう解釈になるのやら。
他人のふりするな。
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNGスレはここですか?
0492デフォルトの名無しさん
NGNG変な解釈したことは否定しないんだな
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < boost本で1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGもうかよ?!
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNGだからてめーにとって価値があるかどうかが何で俺らにわかるんだタコ。
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNGなぜだ?と聞いてるのに主張を繰り返されても…
なぜフリーと商用を区別するのかわからない(サポートの話ならともかく、「文句」に関して)。
好きでやっているか金を取っているかの違いしかないだろ。
それともお前は「フリーウェアを好意に甘えて使わしてもらう」という
態度が正しいと思うのか?
0502デフォルトの名無しさん
NGNGせっかくの500がおまえのような糞レスでがっかりだ!
0503デフォルトの名無しさん
NGNG馬鹿か?お前?
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNG開発者だったら文句言う奴は叩き潰す。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG>フリーと商用を区別するのかわからない
わからなければ死ねよ。
0508デフォルトの名無しさん
NGNGワラタ
それはともかく皆さんお風呂の時間ですよ。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG自分で金稼げるようになってからゴタク並べな。ガクセイちゃん。
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNGDQNにマナー要求しても、無駄。行動で示すしかない。
0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNGどうするんだ?
0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNG具体的に書いたら通報されるので、書けない。
0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGちょっと見ないうちに掃き溜めに鶴になってるな
0525デフォルトの名無しさん
NGNG意味わかってるよな?
0526デフォルトの名無しさん
NGNGhttp://homepage3.nifty.com/Aransk/contents4.html
0527デフォルトの名無しさん
NGNG絶妙なタイミングで変なネタもってくるんじゃねーよこの、チョンマゲ
0528デフォルトの名無しさん
NGNGへんなネタって何です?Genericクラスに関するHPですよ
0529デフォルトの名無しさん
NGNG死 ね
0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG嘘コケ!お前が個人的に休暇とってる引きこもり高校生だろが。
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG私立の高校ならもう期末テスト終わって休みに入ってる所があるよ。
>>535
( ゚Д゚)ハァ?オヤジはお前だろヴォケ。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGメリットが開発人にはあるから、ここでウザイ連中よりましかと思いますた。
0540デフォルトの名無しさん
NGNG終 了
0541デフォルトの名無しさん
NGNG自書の宣伝ごくろーさん
0542デフォルトの名無しさん
NGNGboost::funcitonとかboost::shared_ptrなんかはoperator boolじゃなしに
なんかメンバへのポインタを返すキャスト演算子をつかって
function<void ()> f;
//チェック
if(f){
f();
}
のようなことをやりますが、なんでoperator boolじゃないの?
safe bool idiomとかでいろいろ調べたがわからなかった・・・
ちなみにfuncitonの場合だとboost/function/funciton_template.hpp400行目くらいの
operator safe_bool () constの周辺のやつね。
shared_ptrはoperator unspecified_bool_type() constのへん。
0543デフォルトの名無しさん
NGNG0544名無しさん@Vim%Chalice
NGNGstruct Hoge {
struct dummy { void nonnull() {}; };
typedef void (dummy::*safe_bool)();
operator safe_bool () const { return (this->empty()) ? 0 : &dummy::nonnull; }
//operator bool () const { return !(this->empty()); }
bool empty() const { return false; }
};
int main()
{
Hoge hoge;
int a = aho +1;
}
でbool の場合と safe_boolの時とでコンパイルしてみれば分かると思うけど、
後者だとintに暗黙の変換がされないからコンパイル時にエラーになってくれる、と。
0545544
NGNG0546544
NGNGs/aho/hoge/
0547デフォルトの名無しさん
NGNGboost 本に載ってるよ。
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG悔しかったら君も本を書いて売ってみたまえ。
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG0556542
NGNGint a = aho +1;
というのは気づかなかったです。
0557デフォルトの名無しさん
NGNGtypedef void (dummy::*safe_bool)();
はprivateじゃなくていいの?
shared_ptr,scoped_ptrはpublicになってる(バグか?)が、
functionはprivateになってた。
void test(bool b)
{std::cout << "bool" << std::endl;}
//そもそもこれをやるやつはいないだろうが...
void test( Hoge::safe_bool f )
{std::cout << typeid(f).name() << std::endl;}
test(hoge);//だと後者が呼ばれる。
0559デフォルトの名無しさん
NGNGああ、543のわかりやすい例としてね。修正するとこんな感じか。
struct Hoge {
private: struct dummy { void nonnull() {}; };
typedef void (dummy::*safe_bool)();
public: operator safe_bool () const { return (this->empty()) ? 0 : &dummy::nonnull; }
//operator bool () const { return !(this->empty()); }
bool empty() const { return false; }
};
boostの該当箇所はここかな。
boost::shared_ptr<int>::unspecified_bool_type a;//public
boost::scoped_ptr<int>::unspecified_bool_type b;//public
//boost::function1<void,int>::safe_bool d; //private
0560デフォルトの名無しさん
NGNGC++で正規表現したいなと思ってboostのregexを使っているのですが、
マルチバイト対応で組もうとするとコンパイルが通りません。
環境はVC++6.0です。
std::wstring source =L"アルファベットを含むShift_JIS文字列";
boost::reg_expression<wchar_t> regex = L"[a-zA-Z].*[a-zA-Z]";
boost::match_results<std::wstring::const_iterator> results;
if ( boost::regex_search(source, results, regex) ) {
wcout << results.str(0) << endl;
}
上記のboost::regex_search(source, results, regex)のsourceの型が不正だと言われます。
何かここ以外で記述が足らないのでしょうか?
宜しくお願いします。
0561デフォルトの名無しさん
NGNG質問の趣旨は別にして、
それはマルチバイトじゃなくてワイド文字列ですな
0562デフォルトの名無しさん
NGNGご指摘ありがとうございます。
0563デフォルトの名無しさん
NGNGstd::wstring s(L"hoge");
boost::wregex e(L".+");
boost::wsmatch m;
boost::regex_search(s, m, e);
boost::regex_match(s, m, e);
とやったらregex_matchでエラーが出るってのなら経験したが。
んで、
boost::match_results<std::basic_string<wchar_t>::const_iterator, boost::wregex::allocator_type> m;
だとregex_matchは通るが今度はregex_searchが通らない。
0564デフォルトの名無しさん
NGNGVCのサービスパックは入ってる?
うちでは動いたよ。
0565デフォルトの名無しさん
NGNG今までサービスパック入ってなかったので入れました。
でも、結果は同じでした。
: error C2665: 'regex_search' : 10 のオーバーロードは 1 番目の引数を
'class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,
class std::allocator<unsigned short> >'
から要求の型に変換できません。(新しい機能 ; ヘルプを参照)
プロジェクトを作り直してみます・・・。
他に何かヒントがあったら、またお願いします。
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGboost::wregex
0568デフォルトの名無しさん
NGNGmodify the makefile to add /Zc:wchar_t before building the library.
0569デフォルトの名無しさん
NGNGこれならVC6とVC71で通るはず。
std::wstring s(L"hoge");
boost::wregex e(L".+");
boost::wsmatch m;
#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
boost::wsmatch m2;
#else
boost::match_results<std::basic_string<wchar_t>::const_iterator,
boost::wregex::allocator_type> m2;
#endif
boost::regex_search(s, m, e);
boost::regex_match(s, m2, e);
0570560
NGNG566>>
ご指摘ありがとうございます、BOOSTのバージョンはboost_1_31_0です。
STLの種類というのは使用しているnamespaceの事なのでしょうか?
それならばstdのみを使用しています。
>>567,568
ヒントありがとうございます。
>>569
動きました!!ありがとうございました!!
何がいけなかったのか自分なりに考えてみます。
ホントに助かりました、ありがとうございました。
0571デフォルトの名無しさん
NGNG何が悪いってそりゃバグだらけのVC++6.0が悪いんだが。
それをboost/regexがフォローしきれてないだけ。
0572560
NGNGありがとうございます。
なるほどぉ・・・。
0573569
NGNGたぶんバグくさいな。(VC++6Sp6,Boost1.31+公式regexPatch)
[boost/regex/v4/regex_match.hpp]に以下の
関数を追加してしまえば、563でも動くようになる。
//追加関数Patch
inline bool regex_match(const std::basic_string<wchar_t>& s,
wsmatch& m,
const wregex& e,
match_flag_type flags = match_default)
{
return regex_match(s.begin(), s.end(), m, e, flags);
}
ソースのこの関数の定義の上に上記の関数を追加。
inline bool regex_match(const std::basic_string<wchar_t>& s,
match_results<std::basic_string<wchar_t>::const_iterator, wregex::allocator_type>& m,
const wregex& e,
match_flag_type flags = match_default)
0574デフォルトの名無しさん
NGNGループのアンロールで速くなるっていうのはLoop処理のオーバーヘッド(ループカウンタのデクリメント
、条件分岐)と比較して、繰り返し処理の内容が小さいときに限られると思うんだがどう?
処理内容が数命令なら効果は絶大。でも大きい処理内容の場合はほとんど効果なしだと思うんだけどな?
実際、アセンブラでプログラムする場合はアンロール(というよりべた書きと言ってる)は
常套手段で、べた書き部分を吐くperlを書いたりしてたんだけど。。。
ループのアンロールっていうのは速くなる以外になんかメリットってある?
むしろデメリットの方が多いような?
0575デフォルトの名無しさん
NGNGループのアンロールに関してはループ処理のコストがどうこうよりも、
条件分岐がなくなることで分岐予測が不要になる、ってのが最近のCPUに
とっては重要だと思うが。
タイトなループでなければ不用ってのは当然スギ
0576デフォルトの名無しさん
NGNGその考えで合ってるんじゃないの?
条件分岐のペナルティは大きかったから、それを減らしたかった。
また、アンロールすることでイタレーションに跨る最適化が行えるようにもなる。
最近のCPUはペナルティを小さくできてるし、コードサイズが大きくなることでキャッシュ
ミスをし易くなるのでアンロールした方が速いとは限らない。
実際に計って速い方を選ぶべき。
0577デフォルトの名無しさん
NGNGtemplateと何の関係が?
0578デフォルトの名無しさん
NGNG下のようにtemplateをunrollに使う話もありますよ.574さんは言及してませんけど.
template<size_t N>
double in_prod(double *a, double *b)
{ return a * b + in_prod<N - 1>(a + 1, b + 1); }
template<>
double in_prod<0>(double *a, double *b)
{ return 0.0; }
double a[3], b[3];
double x = 0;
x = in_prod<3>(a, b);
// 以下のコードに相当
//for(int i = 0; i < 3; ++i){ x += a[i] * b[i]; }
0579デフォルトの名無しさん
NGNG>ループ処理のコストがどうこうよりも、条件分岐がなくなることで分岐予測が不要になる
高速処理が必要な場合にループ内部に条件分岐を紛れ込ませること自体ご法度だろ。
0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG無茶な話だな。どれくらい無茶かと言うと、
Cスレで「教えてください。ミサイルの弾道計算なんですが・・・」と始めて、
「Cと関係ないだろ。ぼけ」と突っ込まれて、
「弾道計算にCを使う話もありますよ」というくらいに無茶だ。
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG無茶さを10倍に増やした例を持ち出されても、
ああ、この人必死なんだな、としか思えませんね :-P
0585デフォルトの名無しさん
NGNGループの処理内容に条件分岐さえなければ、カウンタの終了判定でパイプラインが乱れることはない。
それと君はハードウェアループは知らんだろな?
>>582
578の例のどこが無茶な話なんだ?
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGループの条件分岐にペナルティがあるからこそ、ハードウェアループという
発想になるのだが…。
0588デフォルトの名無しさん
NGNGなんか、一部のアーキテクチャのプロセッサを想定してないか? 一般論として、
カウンタの終了判定でパイプラインが乱れないとは言えんでしょ。
0589デフォルトの名無しさん
NGNG> それと君はハードウェアループは知らんだろな?
ハードウェアループを使うとループ終了判定のペナルティはなくなるが、
ループのネスト数に制約がつくし、ループスタックを深くすると、今度は
コンテクストスイッチのオーバーヘッドが大きくなる。
DSP には適してるが、汎用言語・汎用 OS 向きの仕組みじゃないと思う
けどなぁ。そのへんどううよ?
0590デフォルトの名無しさん
NGNG利用にも厳しい制約がつくよね。
0591デフォルトの名無しさん
NGNG条件判断に要するオーバーヘッドのことであって、あらかじめ確定した
繰り返し処理でパイプラインが乱れることはないよ。終了判定が処理を実行
しないと決まらないような場合は別だけど。
で、ループ内部に条件判断がなくて、ループ処理のオーバーヘッドが問題に
なる場合っていうのは、極めて簡単な処理に限られると思うんだが?
0592デフォルトの名無しさん
NGNGパイプラインを自分で作ってみればわかると思うよ。簡単にできるからやってみれば?
0593デフォルトの名無しさん
NGNGサクッと参考文献なりソースなり示してもらえると話が早いかと。
0594デフォルトの名無しさん
NGNG小さな、たとえば 4x4 程度の行列を操作するようなケースでは、
ループ展開できると効く。もっとも、最近のプロセッサだと SIMD
命令使って計算することになるから、あまり関係ないが。
0595デフォルトの名無しさん
NGNG当然、ハードウェアループは処理内容だけじゃなくそれに収まる命令サイズ
も制限を受けるよ。そうであっても効果があるから使う。
しかもループのネストできるアーキテクチャなんてあるのかな?
調べたことないので知らない。
>DSP には適してるが、汎用言語・汎用 OS 向きの仕組みじゃないと思う
>けどなぁ。そのへんどううよ?
それもわからない。けど、シビアにクロックを削減したい用途であることは
間違いないと思う。そこまでシビアなクロック数を要求するアプリケーションが
汎用CPUにあるかということだね。
ただ、数値計算が主体でもないのにマッチドフィルタ/ベクトルプロセッサ
を載せてるCPUもあるぐらいだからね。まぁこっちの方が載せる価値があると思う。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGどういうときにtemplate でunrollするのが得かって話だろ?
ジェネリックプログラムにぴったりなんじゃないの?
0598デフォルトの名無しさん
NGNGマジ?HDL書きたい?
確かに、
アプリのローカライズやったり、
営業まがいのSEやるよりやりがいはあると思うし、
人手不足で引く手あまたの業界ではあるが。
0599デフォルトの名無しさん
NGNG>カウンタの終了判定でパイプラインが乱れないとは言えんでしょ。
パイプラインに乱れはないが、そんなことを考える君の脳みその乱れが心配だ。
0600デフォルトの名無しさん
NGNG寝転びながら斜め読み。15ページぐらいですっかりわからなくなった。
気合入れなおして行きつ戻りつしつつ2度程読み直してようやく納得できた。ひぇー。
これめちゃ注意しながら読まないとわけわからなくなるじゃん。
内容が難しいのかそれとも笑福亭鶴瓶やあのねのねの後輩にあたる訳者のせいなのか
一番問題はおれのおつむか?
これ原書はどうよ?
C++ templates の方が読みやすいじゃん。Modernの方が簡単だとばっかり思ってた。
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNGグラフクラスを使いたいんすけど
0603デフォルトの名無しさん
NGNGmake allでiostreamのコンパイルはできんだけど
make installできないYO… なんで( ;´Д`)?
0604603
NGNG0605デフォルトの名無しさん
NGNGじゃないのか?
0606603
NGNG0607デフォルトの名無しさん
NGNGだからソースだそうよ
0608603
NGNGコマンドラインでcl.exe(VC7.1付属)を使って直接コンパイルしてます
(1) STLPort static lib
#define _STLP_DEBUG 1
#define _STLP_USE_STATIC_LIB 1
#include <iostream>
の順に記述してるのにLIBCMT.libで定義されてるからリンクできないって出てしまいます…
LIBCMT.libを使わなくするにはどうすれば良いんでしょうか?
(2) 標準iostream使う時
#define _STLP_NO_OWN_IOSTREAMS 1
#include <iostream>
にすると、
C++例外処理を使っていますが、アンワインド セマンティクスが有効にはなりません。-GXを指定てください。
と言われます… たしかに-GX使うとコンパイル通りますけど、そういうもんなんでしょうか?
また、(2)のケースではstrportディレクトリをinclude pathに入れてはいけないのでしょうか?
(1)(2)いずれもmain関数のみで、内容は以下です
int main(int argc, char* argv[])
{
std::cout << "Hello World." << std::endl;
return 0;
}
0609デフォルトの名無しさん
NGNG2 マニュアル読め
0611デフォルトの名無しさん
NGNGboost::pool_allocatorは開放して再確保する時に速いからその方法じゃ比較になってないと超亀レス
0612デフォルトの名無しさん
NGNGusing namespace std;
string work="hoge";
char array[10];
strcpy(array,work.c_str());
上のコードで3行目のstrcpyで
error C2668: 'strcpy' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
と怒られてしまいます。
本等を見てもこれで通るはずなのですが・・。
解決策があったら教えてください。
VC++6.0でサービスパック6です。
0613デフォルトの名無しさん
NGNG0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG○ #include <string.h>
その前にスレ違いじゃないか?次からはCスレにGO!
0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG#include <string> //std::stringクラスなどを使う時にインクルード
#include <cstring> //string.hの代わり、strcpyのなどを使う時にインクルード
0618デフォルトの名無しさん
NGNGレスどもでした。
0619デフォルトの名無しさん
NGNGset<int, less<int> > myset;
後でCompareオブジェクトを降順用のに切り替えることってできませんか?
0620デフォルトの名無しさん
NGNG無視していいのでしょうか?
posix_api.obj : error LNK2001: 外部シンボル ""private: unsigned int __fastcall b
oost::cpp_regex_traits<wchar_t>::do_syntax_type(unsigned int)const " (?do_syntax
_type@?$cpp_regex_traits@_W@boost@@ABIII@Z)" は未解決です。
bin\boost\libs\regex\build\boost_regex.dll\vc7.1-stlport\release\threading-multi
\boost_regex-vc71-mt-p-1_31.dll : fatal error LNK1120: 外部参照 1 が未解決です。
実行したコマンドは
bjam -sTOOLS=vc7.1-stlport --prefix="C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7" install
です
0621デフォルトの名無しさん
NGNGそのままじゃ無理なんで、昇順降順を切り替えられるファンクタを用意して渡す
0622デフォルトの名無しさん
NGNGその前にsetの実装を調べた方がいいよ。
Compareを使っている場合があるから。
0623デフォルトの名無しさん
NGNG比較関数が途中で変わったら内部が混乱して思ったとおりに動かなくなるよ
0625デフォルトの名無しさん
NGNG実装のリンク集はどこかご存知だろうか?
以前どこかで見かけたんだが、今探したら見つからず。
0626デフォルトの名無しさん
NGNGこれ?
http://spirit.sourceforge.net/repository/applications/show_contents.php
他にもあるなら俺もキボン
0627デフォルトの名無しさん
NGNG普通に内部ぶっ壊れるし、壊れなかったとしても実装依存じゃないかな。
0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNGPCなんて必要になることある?
(=使ったことがない人には実感がわかない)
0630デフォルトの名無しさん
NGNGyes. 使い始めると止まらない止められない終わらない
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNGcout の型は ostream
ostream は basic_ostream<char, char_traits<char> > のtypedef
0637デフォルトの名無しさん
NGNGあと付けでstringとstreamを対応させただけ
0638デフォルトの名無しさん
NGNGんなことは誰でも知ってる。
昔話は他でやってくれ。
0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNGすぐに便利な例というと、むしろ st::auto_ptr とか std::vector とかかねぇ。
0641628
NGNG俺が言いたいのはtemplateを使って実用に耐えれるようなクラスを
書けるか?ということ。
俺は職業上ながいことC++やってるがまともにtemplateクラスを
かける奴見たことないぞ。std::stringですらお遊びプログラマでは
かけないとおもう。
0642デフォルトの名無しさん
NGNG過去ログ読んでないからずれた事言ってたらスマソ。
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG採算性がないってこと?
0645デフォルトの名無しさん
NGNG使うのだとしたら、周りのレベルの低さを愚痴っているだけじゃないのか?
少なくとも、スマートポインタ周りはtemplateを使ったほうが楽なんじゃないかと思うが。
(自作するにしろ、拾ってくるにしろ)
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNG10年前からきた人でつか?
0649デフォルトの名無しさん
NGNGプゲラ
まぁC++の歴史を考えると、長いもクソもないだろう。
0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNGそれはそれで美しくないことに気づくジレンマ
0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGそれを回避しようとtraitsなんかを導入してどんどん複雑化するし。
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG仕様に読み勝ってこそのC++、ちゃんとOOPやりたきゃJava行く
0656デフォルトの名無しさん
NGNGテンプレートの特殊化を行うとき、同じ型のものを別々に特殊化したいときは
どのように実装するのがスマートなのでしょうか?
例としては、こんなかんじに扱いたいのです。
----
template <typename T> class X
{
const T PI;
// some method ...
};
typedef float Degree;
typedef float Radian;
template <> const Degree X<Degree>::PI = 180.0f;
template <> const Radian X<Radian>::PI = 3.14f;
----
現在は、
----
template <typename T, int UNIQ> class XCore
{
public:
XCore(const T& t) : m_t(t) {}
const T& operator() const { return m_t; }
private:
T m_t;
};
typedef XCore<float, 0> Degree;
typedef XCore<float, 1> Radian;
----
とやっているのですが、いまいちその場しのぎなかんじがしてます。
そもそもの設計がまずいのでしょうか?
0657628
NGNGなんで態々ラーメン屋いって、無理やりうどん
つくらせるかな〜?
0658デフォルトの名無しさん
NGNG0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNGclass XCore {
const TYPE PI;
};
class Degree {};
class Radian {};
template <>
const XCore< float, Degree >::PI = 180.0f;
template <>
const XCore< float, Radian >::PI = 3.14f;
enumの方がいいですかね?
0661デフォルトの名無しさん
NGNGどちらかがどちらかを継承して必要な部分をオーバーライドでいいじゃん
0662656
NGNGどちらかがどちらかを継承するというのは、具体的にどういうコードになるのでしょうか?
補足すると、class X はそれぞれで定義された PI の値を使用してメソッドを組み立て、
最適化が効くものだけ特殊化しようと考えていました。
0 <= angle < 2*PI に正規化するメソッドであれば、
template <typename T> class X
{
public:
const T PI;
void normalize(){
while(m_angle < 0) { m_angle += PI * 2; }
while(m_angle >= PI * 2) { m_angle -= PI * 2; }
}
private:
T m_angle;
};
template <> const s32 X<s32>::PI = 0x8000;
template <> void X<s32>::normalize()
{
m_angle &= 0x0000ffff;
}
0663デフォルトの名無しさん
NGNGラジアンクラスを継承した度クラスでいいのでは?
PIはPIだよw
0664656
NGNG継承を使う場合は、float や int といった実際の型に縛られると思ったので
template にしたのですが、何か勘違いしていたでしょうか?
>>660
たしかに PI の値は X ではなく、Radian/Degree の型のほうにもたせたほうが
意味的にもすっきりしますね。というわけで書き直してみました。
前より意味がとおりやすく、すっきりしたコードになった気がします。
ご意見ありがとうございました。
----
template <typename T> class X {
public:
X() {}
X(const typename T::ANGLE& angle) : m_angle(angle) {}
}
private:
typename T::ANGLE m_angle;
};
template <typename T, typename UNIQ> class AngleCore {
public:
typedef T ANGLE;
static const T PI;
};
class Angle32Tag {};
class DegreeTag {};
class RadianTag {};
typedef AngleCore<int, Angle32Tag> Angle32;
typedef AngleCore<float, DegreeTag> Degree;
typedef AngleCore<float, RadianTag> Radian;
const int Angle32::PI = 0x8000;
const float Degree::PI = 180.0f;
const float Radian::PI = 3.14f;
0665デフォルトの名無しさん
NGNGconst int AngleCore<int, Angle32>::PI = 0x8000;
0666665
NGNGなくてもコンパイルできるんだけど一応。
教えてエロい人。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGModern C++ Design 嫁。
template クラスのスパゲッティに笑える。
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGDegree::PI +Radian::PI が計算できちゃうし。しかも意味のない数字になっちゃう。
クラステンプレートにする意味が・・・
0675デフォルトの名無しさん
NGNGfloat radian_pi : Radian;
みたいにセマンティクスで拘束できたら楽なのにな。
C++だとこんな感じで書けるようにすればいいんでないかな。
semantic_numeric<float,Degree> degree_pi;
semantic_numeric<float,Radian> radian_pi;
0676デフォルトの名無しさん
NGNG半周の角度の事ではないと思うんだが。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGha?
0679デフォルトの名無しさん
NGNGいや、自分が悪いんだけどさ…
0680デフォルトの名無しさん
NGNGなんとなく思うんだけど、これって単位の問題だから
基底ベクトルクラスと直積・直和を考えた方がもっとスッキリしそうな気がする。
Modern C++ Design の一番最初に出ている例みたいな感じとかとか・・・
僕ぁ使わないと思うけど・・・(あんま気にならないクチなので)
0681デフォルトの名無しさん
NGNGって?
0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNGいきなりlexeme_dとかでつまづいてしまいました・・・
日本語のサイトとかBoost本とかは見てるんですが、
この際英語でもよいのでどっか詳しい解説ページとかないですかね?
0684デフォルトの名無しさん
NGNG公式ドキュメントはどうした?
0685683
NGNG書き忘れましたが公式ドキュメントもちゃんと読みました。
せっかく(?)だから直面した問題も書いておきます。
Cプリプロセッサみたいなのを作ってみようと
こんなParserクラスを作ってみました。
Parserクラス(すごい簡略化してますが)
{
rule<ScannerT> ident, filename, include, value, translation_unit;
ident = +((alnum_p) | '.');
filename = '\"' >> ident >> '\"';
include = "include" >> filename;
value = int_p;
translation_unit = +(include | value) >> end_p;
}
Parser parser;
parse(first, last, parser, space_p);
上のだとコンパイルも通るんですが、これだとfilenameルールのところで
”(ダブルクォーテーション)とファイル名(identルール)の間にスペースを入れることが出来てしまいます。
そこでこれを回避するためにlexeme_dディレクティブを使って、
filename = lexeme_d[ '\"' >> ident >> '\"' ];
としたところ、
error C2664: 'boost::spirit::rule<ScannerT>::parse' : 1 番目の引数を 'const boost::spirit::scanner<IteratorT,PoliciesT>' から 'const scanner_t &' に変換できません。
というエラーが出てしまいます。
たぶんlexeme_dの使い方に問題があるのかと思うんですが、
なにぶんspiritに関する情報が少ないもので・・・
0686デフォルトの名無しさん
NGNGlexeme_dの外部のscannerと内部のscannerで型が変わるので,
directive内部のruleの型を変えないとならないです.
その例ではidentを
rule<typename lexeme_scaner<ScannerT>::type> ident;
(その書き方だと多分typename必要ですよね?)と宣言しなければなりません.
詳しくはhttp://www.boost.org/libs/spirit/doc/faq.html#lexeme_and_rulesか
http://www.boost.org/libs/spirit/doc/scanner.html#lexeme_scannerを参照してみてください.
0687デフォルトの名無しさん
NGNGscanner_listなる機構も用意されています.
http://www.boost.org/libs/spirit/doc/rule.html#multiple_scanner_support
0688683
NGNG回答ありがとうございます。
identルールのみ↓のようにしたところ、
コンパイルも通り、期待の動作をするようになりました。
Parserクラス(すごい簡略化してますが)
{
rule<ScannerT> filename, include, value, translation_unit;
rule<typename lexeme_scanner<ScannerT>::type> ident;
ident = +((alnum_p) | '.');
filename = lexeme_d[ '\"' >> ident >> '\"' ];
include = "include" >> filename;
value = int_p;
translation_unit = +(include | value) >> end_p;
}
しかし公式ドキュメントちゃんと読んだとか言ってて全然読めてませんね。
もうしわけない・・・
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGそんなあなたに C++ Templates。本が厚い分だけ丁寧に解説してるぞ。
0691デフォルトの名無しさん
NGNGそれ邦書で出ないかなぁ
0692デフォルトの名無しさん
NGNGhttp://mulberryl001.ddo.jp/~paserry/
0693デフォルトの名無しさん
NGNGC++ Templates の英語は義務教育終わってるなら絶対読める。
Modern の方は訳本しか持ってないんだけど、これ訳の程度はどんなもん?
難しくしてるのは訳のせい?それとももともと難しいの?
0694デフォルトの名無しさん
NGNG説明の仕方が糞なんだ。
邦訳しか読んだことはないが、
訳者がよっぽど変な訳し方してない限り、原文も糞だと思われ。
0695デフォルトの名無しさん
NGNGん?
各章の話題の振り方とかその引っ張り方とか見ると、
そんなに説明下手とは思わんが?
あれはやっぱり翻訳に難ありと見た。
もっともオレも原書見てないから確実なことは言えんが。
0696デフォルトの名無しさん
NGNGどこがどのように糞なのか書けなさそうだしね
0697デフォルトの名無しさん
NGNGこんにちは、訳者さん。
どう糞なのか説明してあげるから全ページキャプしてウpしてね。
0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNG厨の常套手段だからな。
0700デフォルトの名無しさん
NGNG俺は訳本しか持ってないんだけど、
サンプルコードの解説文がわけわからないこと多数。特にカタカナ表記の単語
が数多くあって、それがあんまり日本語になじみなくて、言ってることがわから
なくなったりする。俺だけかな?適した訳を考えるのが面倒なのでえーいそのまま
カタカナにしてしまえって感じかな?コンピュータ関連本はだいたい似たり寄ったり
だけどこれはちょっと度が過ぎてるように思うんだけどね。
それと、これはたぶん原著がそうなんだろうけどプログラムのセンスというより
前後の断片化されたコードを忍耐強くつないでいくような読み方を要求される。
どうせならLokiの解説に徹したほうがよかったんじゃないのかね?
あといきなり面食らったのは
1.8節にはいっていきなり
だいぶんよくなってきました。
ってかいてあるんだけど、これ何?何が良くなってきたの?
C++ Templatesの方が間違いなく読みやすいと思うけどね。
0701デフォルトの名無しさん
NGNG実際、分からない奴が人並み外れて馬鹿なだけですから ;-)
0702デフォルトの名無しさん
NGNGModernのサンプルコードですんなりそれができる人は神だな。
言語仕様として初めからこういう使い方想定してたらもうちょっと違った形になるんと違うか?
と思うんだけど、どう?
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNGでも
わかった気で実はなーんもわかってないというのは恥ずかしい罠
0705デフォルトの名無しさん
NGNGいや、サンプルコートも実に複雑だと思うが。
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNGModern C++ Design が行った問題提起は、普通は詰まらない物として考えない
小さな部品を組み合わせてできる物の全体像を再度認識させた所にあると思う。
この点について、この本以前の言語の利用ノウハウ書では見た事がないです。
ちなみに応用ならライブラリーの解説書と言う事なると思うがどうか?
それが目的なら、ちょっと上にあるboost本こそが読むべき本だと思う。
この本は解説本ではなくノウハウ本だと感じるので。
0708デフォルトの名無しさん
NGNGあれは読んでどうこういう本じゃないでしょ。単なるboostの外仕
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGboost本と Modern C++ Design とは使用目的も違うだろ
そもそも、読んでないか読めてないだろ、お前
バカなんだから諦めろ
0711デフォルトの名無しさん
NGNGおおっとboost本の原作者さんのご降臨です。
宣伝ご苦労さん。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG「原作者」ねえw
0714デフォルトの名無しさん
NGNG使用目的も異なるし、計算機の書籍としての重要性も比較にならないboost駄本などを>>707が持ち出したから言ったまで。
0715デフォルトの名無しさん
NGNGそれが何か?
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG有意義な議論したいなら人格攻撃とか駄本とか刺のあるような言葉使っちゃダメ
0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNGあんた精神病んでるよ
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNGModern本はtemplateの活用を、
書籍の形にして広く紹介したことに意味があるんだよ。
だから、もはや役割を終えたんだよ。
そうなれば説明が糞なのが目に付くのは当たり前。
今となれば、あんな説明なら概説+UML+コード+αだけの方がまだいい。
0722デフォルトの名無しさん
NGNGならないよ、でも間違いなく頭イカレテルね
なんだろうね、この違いは
普通は分るね
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGお前にはその程度の説明するのが関の山なんだろうな。
知 障 さ ん
0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG|┃三 ________________
|┃ /
|┃ ≡ ∧_∧ < 議論と聞いちゃぁ黙っちゃいられねえ!
____.|ミ\___( ゚ ε 。 ) _ \
|┃=___ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|┃ ≡ ) 人 \ ガラッ
0728デフォルトの名無しさん
NGNG一番売れるのは初心者向けだからね。それを教えてくれたよ。
0729デフォルトの名無しさん
NGNGちゃちゃ入れるな->稲葉君
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG>やっぱIDが出ないとだめだな
お前のような自作自演が居るからな
0734デフォルトの名無しさん
NGNG_人
∩ ∧_∧ ノ⌒ 丿
\ヽ_( ) _/ ::(
\_ ノ / :::::::\
∩_ _/ / ( :::::::;;;;;;;)
L_ `ー / / / \_―― ̄ ̄::::::::::\
ヽ | |__/ | ノ ̄ ::::::::::::::::::::::)
| ̄ ̄ ̄\ ノ えっと ( ::::::::::::::;;;;;;;;;;;;ノ
| | ̄「~| ̄( 、 A , )とりあえず / ̄――――― ̄ ̄::::::::\
| | | | ∨ ̄∨ ( :::::::::::::::::::::::::::::::::)
し' し' \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ
__
>>1 l ̄/. ___
↓ / /. / ___ノ
__/ /_/ /
なげときますね! Y人, ' ',人⌒ヽ、, '
Y⌒ヽ)⌒ヽ、 人,ヽ)人'、, '
へ, --- 、 ノ ̄ ::::::::::::::::::::::)
/ ̄ ̄ ̄ 、____\ ( ::::::::::::::;;;;;;;;;;;;ノ
/ _/ ̄「~|\ __ \ / ̄――――― ̄ ̄::::::::\
| | | | ( 、 A , \ミソ ( :::::::::::::::::::::::::::::::::)
し' し' と∨ ̄∨ \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ
0735デフォルトの名無しさん
NGNGなんで未だにこの本の話題が出るのか、俺はそれが不思議だ。
0736デフォルトの名無しさん
NGNG日本語訳は原著の文章の雰囲気をうまくつかんで訳せてると俺は思った。
少なくともCUJの記事とか色んなMLのログを見ればAlexandrescu氏の文の
書き方がどんなかはわかると思うんで、MC++Dの原文もそんな雰囲気。
0737デフォルトの名無しさん
NGNG> なんで未だにこの本の話題が出るのか
おまえが引っ張るからじゃないのか?
0738デフォルトの名無しさん
NGNG彼の英文って結構ユニークな書き方ですよね?(そう感じているのは私だけ?)
0739デフォルトの名無しさん
NGNG必ずスレの流れをぶち壊す方が居ますね。
なんか、ちょっと他の話題と異なる違和感を覚えるのは考えすぎでしょうか?
0740デフォルトの名無しさん
NGNGやさしいBoostに改名すればいいんじゃないのかな。
初心者向けの本だし。
0741デフォルトの名無しさん
NGNGなんでboost本だけは叩かれてるんだろうか。
やっぱり期待が大きすぎただけじゃないか?
0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNGVC++7.1にSTLport-4.6.2をインストールした後、
boost1.31.0をビルド(bjam3.1.10使用)すると、cpp_regex_traits.cppの所で
disabling support for class cpp_regex_traits<wchar_t>
- rebuild with /Zc:wchar_t if you really need this
と出てしまい、その後regexのコンパイルが失敗してしまうんですが…
どなたか同じ現象に会って回避した方いらっしゃいますか?
0744デフォルトの名無しさん
NGNGRebuild with /Zc:wchar_t if you really need this.
0745743
NGNG/Zc:wchar_tならregexのmakefile(vc71-stlport.mak)に最初から付いてるんだけど、
そうじゃなくてSTLportの方に付けてリビルドしろってことかいな?
でもSTLportを/Zc:wchar_t付きでリビルドして再挑戦したけど結果は変わらなかったよ…
error LNK2001: 外部シンボル ""private: unsigned int __cdecl
boost::cpp_regex_traits<wchar_t>::do_syntax_type(unsigned int)const"
(?do_syntax_type@?$cpp_regex_traits@_W@boost@@ABAII@Z)" は未解決です。
ってのが出て .lib の作成に失敗してしまう… orz
0746デフォルトの名無しさん
NGNGMinGWでもVC7.1でもコンパイルエラーが・・・
とりあえず
1:クラスへのテンプレート引数をenable_if,disable_ifに渡したところコンパイルエラーが。
2:テンプレートクラス内のテンプレートメンバー関数は、関数の引数に依存している型をenable_ifに渡す場合は問題なく動作(MINGW,VC7.1共に)。
0747名無しさん@そうだ選挙に行こう
NGNG結果変わってんじゃないの?
それに、外部シンボルが未解決でも .lib の作成ならできるはずでは?
0748747
NGNG0749名無しさん@そうだ選挙に行こう
NGNG0750名無しさん@そうだ選挙に行こう
NGNG0751743
NGNGSTLportをリビルドする前と後でエラーの内容変わってないです
743と745のメッセージは前後で2種類両方とも出てました
STLportを使わずに bjam -sTOOLS=vc7.1 でビルドすると
これらのエラーが全く出ないのでおかしいと思って…
うーーん、まいった… ワカラン orz
0752名無しさん@そうだ選挙に行こう
NGNGC#がgenericsサポートした以上崩壊してしまったな。
あとはC#の下請けとしてがんばってくれや。
0753名無しさん@そうだ選挙に行こう
NGNGCLIのgenericサポートは話題としては面白そうだね。
けど基本的にC#だけって事になるんだと思うけども…
0754743
NGNG(1) STLport-4.6.2を/Zc:wchar_tでリビルドして再インストール。
(2) bjam -sTOOLS=vc7.1-stlportでフルコンパイル、インストール。regexのリンク失敗は無視。
(3) boost_1_31_0/libs/regex/build/の下でvc71-stlport.makを使って単体ビルド。
(4) (3)で出来たregexの.libと.dllを(2)に上書きする。
(5) 実際にregexを使ってアプリを作る時も/Zc:wchar_tを使う。
(プロジェクトのプロパティ→C/C++→言語→wchar_tをビルトイン型として扱う)
以上。
ふぅ… 疲れますた。
0755名無しさん@そうだ選挙に行こう
NGNGC# 2.0の処理系ってもうあるの?
0756デフォルトの名無しさん
NGNG言語設計当初から念頭にあるならC++よりずっと使いやすくて洗練されてるのかな?
0757デフォルトの名無しさん
NGNGMonoがかなりの部分サポートしてるよ。
0758デフォルトの名無しさん
NGNGやっぱり再帰のオンパレードか・・・
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNGhttp://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5e-f87a44af3db9/SpecificationVer2.doc
0762デフォルトの名無しさん
NGNG単語の使われ方が変わっているし、なんか微妙に文法も変な気がする。
主語が吹っ飛ぶことが多いというか。・・・これ書いたのネイティブの人だよね?
俺の英語力がだめなだけなのか・・・
0763デフォルトの名無しさん
NGNGわざわざ教えてくれてありがと。
こんな詳しい解説書がすでにできてたのか・・・
ざっと見ただけなんだけど。
書式としてはC++のようにtemplateと明示しなくていいみたいね。
template template パラメータはどう指定するんだろ?
0764デフォルトの名無しさん
NGNG俺はModernの日本語訳読んでるよりC++ templatesの英語のほうが
よっぽどわかりやすいとオモタ。
実際、後者の方がよっぽど早く読めた英語が決して得意じゃない俺。
あと、見渡せるコードの長さがちょうど良くて後戻りする頻度も
少ないとオモチャ。
印象としてはModernの方はテクの披露、C++ temp.の方はわかりやすく
解説することを心がけてるようにヲモタ
0765デフォルトの名無しさん
NGNG訳がどうこう言ってるような椰子はプログラミング言語に対する基本的な
技能が足りてないと思われ。Modernの日本語訳でおれは普通に理解出来たけど。
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG参考書を山ほど買いこんでた口だろうな。C++に関しても書籍かって、出版
産業に貢献してやれやw
0768762
NGNG俺も同じ感じだ。
ただ、読みやすいけど、文章が頭悪い感じがするのは気のせいなのかなあと。
Modernのほうの翻訳はよくできてるっぽい。
comp.lang.c++.moderatedのAlexの文章を見ているとそのまんまだ。
>>765
そうなんだけど、翻訳どうのでなくて、内容に関してだけ言えば
もう少しわかりやすく書けるのではないかと。理解できない人もいると思う。
0769デフォルトの名無しさん
NGNG>Modernの日本語訳でおれは普通に理解出来たけど。
ハイハイ。ここでは何とでもいえる。もっともなんで本を読むかといえば
技能が足りないからこそ読むんだ。技能が十分あるなら本なんかわざわざ買わず
Lokiをダウンロードしてそれをそのまま読め。
>受験時代に大して変わらないような参考書を山ほど買いこんでた口だろうな。
それをしなかったお前は大学にもいけず専門学校->人材派遣でゴミのように
ただこき使われる日々過ごしてるわけだ。ゲラゲラ
0770デフォルトの名無しさん
NGNGお前は精神科逝ったほうがいいぞ。俺と同じ臭いがする。
0771デフォルトの名無しさん
NGNG死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
0772デフォルトの名無しさん
NGNGどうやら図星だったようだな。エンジニアなら院ぐらいは修了しとこうな。
といっても、君の人生もう手遅れだと思う。
0773デフォルトの名無しさん
NGNGなんでtemplateスレはこんな奴らばかりなんだろう?
他人を見下さないと生きていけないのかい?
0774デフォルトの名無しさん
NGNGboost本は実にいい本だった。歴史に残る名著だ
0775デフォルトの名無しさん
NGNGそろそろ新しい C++ Template 本に飢えてるんじゃないの?
0776燃料注入
NGNGLet's Boostのニュースにこんなのが出てた。
http://boost-consulting.com/mplbook/
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNG著者がDave AbrahamsとAleksey Gurtovoyなんて,
まさにTMPについて書くならこの人!って感じの2人じゃねーかYO!!
0779デフォルトの名無しさん
NGNG目的あるいは準目的に近い人はとっとと読んでわかりやすく解説してくれ。
もうC++自体午後6時って感じなのに・・・
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG読むんであって、仕事に必須ってことじゃないでしょ?
0782デフォルトの名無しさん
NGNGもっと複雑な仕組みが組みこまれてるんだよ。
0783デフォルトの名無しさん
NGNG> 仕事に必須ってことじゃないでしょ?
こういう視点だと職場ごとに違うしねえ。
ある種の人々は、例えば組み込み屋、iostreamさえ必要ないし。
0784デフォルトの名無しさん
NGNG前の仕事でIPルータやってましたけどもとのアーキテクトがTemplate
おたくでがんがん使ってました。 STLは使わないで全部彼自家製
でしたが。 クラッシュしたシステムの死体解剖は時々つらかった
ですね。 何層にも重なったテンプレートの奥深くで死なれると
gdbがどうしても理解できない場合がいくつかありました。
0785デフォルトの名無しさん
NGNGべからず集みたいなのが欲しい。modern にしろC++ templatesにしろ
"こんなこともできます集"であったんで、やるとデバッグが大変になるとか、
再利用が困難になるとか・・・etc ノウハウはもうかなり集積してるんじゃないの?
それを紹介して欲しいな。
templateを有効利用するためのデザパタとか
0786デフォルトの名無しさん
NGNG785自身はどんなこと気をつけて使ってます?
漏れが気をつけてるのは、型毎の特殊化が必要ない部分が多くなるように設計して、
特殊化が不要なメソッド・変数がある程度あるなら、それを集めた基底クラスを作って
使うようにしてるくらいかなー。コード生成量が減るし、必要なら子クラスのメソッドを
仮想関数にしとけば普通のポリモ系のデザインのコードとも親和性高いし。
0787デフォルトの名無しさん
NGNG>>781の意見にはちょっと賛成しかねるところがあります。
けど確かにもっとシンプルなのだけ集めた本があると便利だし、
template書きも迫害(wされなくなるかも…
0788デフォルトの名無しさん
NGNGC++ Templatesはシンプルなもの満載でしょ。
でも、nontype テンプレート引数の制限事項があるのでどうも気力が失せる。
0789デフォルトの名無しさん
NGNGstdafx.hに毎回
#ifdef NDEBUG
#undef _STLP_DEBUG
#else
#define _STLP_DEBUG 1
#endif
とかを書かないといかんのが面倒…
みんなどうしてんの? VCのテンプレート書き換えてる?
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNGstl_user_config.hにかいてる
>>790
それはめちゃくちゃめんどくさいとおもいます
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGhttp://www.jah.ne.jp/~naoyuki/Programs/Programs.html
0796789
NGNG> stl_user_config.hにかいてる
なるほどぉ。
毎回includeされるんだからここに書くのが一番ってわけか。
でも、
#define _STLP_NO_OWN_IOSTREAMS 1
とか
#deine _STLP_USE_DYNAMIC_LIB 1
を定義したい場合などは、そのプロジェクト毎にstdafx.hに書いた方が良さそうだね。
ん?そう言えば…
よう考えたらstl_user_config.hってどっからincludeされてんだろ?
単にinclude pathの先頭にあるだけで読み込まれてるんだが…
0797デフォルトの名無しさん
NGNGsrcディレクトリにあるvc6.makとvc6-unicode.makに違いが見られないんですが
vc6-unicode.makは何のためにあるんでしょうか?
0798デフォルトの名無しさん
NGNG付属のSTLでboost100%だから
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG小学生並の読解力を晒しちゃったねw
0802デフォルトの名無しさん
NGNG例えば、CFontクラスなどを以下の様にvectorクラスで使用すると
コンパイルが通りません… どういう事なんでしょうか?
vector<CFont> font;
font.clear();
0803デフォルトの名無しさん
NGNG0804802
NGNGすみませんでした。コンパイラはVC++6.0です。
以下がエラーメッセージです。
c:\program files\microsoft visual studio\vc98\include\xutility(19) : error C2582: 'CFont' : 代入演算子 'operator =' が、指定されたクラスに定義されていません。
c:\program files\microsoft visual studio\vc98\include\vector(207) : コンパイルされたクラスのテンプレートのインスタンス化 'class CFont *__cdecl std::copy(class CFont *,class CFont *,class CFont *)' の参照を確認してください
0805デフォルトの名無しさん
NGNGCFont a, b;
a = b;
ができないから。
0806デフォルトの名無しさん
NGNG解決方法は、自分でCFontなりの派生作って
演算子定義するしかないですか?
0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNGああ、なるほど。
ちょっと後始末が面倒そうですが…
0809デフォルトの名無しさん
NGNGstd::vector<boost::shared_ptr<CFont> >
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNGハァ?
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNGauto_ptr<vector<T> >を使えということですか?
0818デフォルトの名無しさん
NGNGそれでいいんじゃないの?
vector::swap() を使っても、似たようなことができるかもしれない。
boostを使えば選択肢はもっと広がるだろう。
配列自体の所有権を移動させる方法なんてどうせ実装の詳細だから、好きに選べばいい。
0819デフォルトの名無しさん
NGNGtemplate<class T>
class A
{
public:
void foo() {}
};
template<>
class A<char>
{
public:
void foo() { /* charの処理 */ }
};
こんな感じでいくつか特殊化しているのですが
特殊化した型以外の場合
上の例だとA<int>などとしたらコンパイルエラーになるようにするには
どうしたらいいでしょうか?
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGtemplate <typename T>
struct A {
void foo();
};
template <>
struct A<char> {
void foo() { /* 処理 */ }
};
0822デフォルトの名無しさん
NGNGtemplate <typename T>
class A;
template <>
class A<char> {
void foo() { /* ... */ }
};
0823819
NGNGああなるほど。
コピー禁止クラスを作るときの、コピーコンストラクタとoperator=を宣言だけして実装しないのと
同じような感じなんですね。
ありがとうございました。
0825デフォルトの名無しさん
NGNGtemplate<class ??>
template<typename ??>
この2つは等価ですが、classとtypenameどちらを使ってますか?
自分としてはclassで統一してますけど
場合によって使い分けたりする人もいるんでしょうか?
0826デフォルトの名無しさん
NGNGclassに限らないならtypenameのほうがいいと思う
0827デフォルトの名無しさん
NGNGclass以外==組込み型(int等)
0828デフォルトの名無しさん
NGNG一時期使い分けてたが、大して意味内んでもうしてない。
0829デフォルトの名無しさん
NGNG趣味趣味。template template パラメタの場合には typename 使えないって
微妙な仕様もあるので、俺は class で通してる。
0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNGその「しかしながら」は、どのレスからつなげればいいんだ?
0832デフォルトの名無しさん
NGNGたぶんここの誤爆だと思割れ目
http://pc5.2ch.net/test/read.cgi/tech/1090180012/
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNG名探偵認定
0835830
NGNG適当に書いたら投稿できて。
814がauto_ptrいらんといってるがこれはauto_ptrの本当の有効な使い方を知らんからだと
思う。たとえば複数のオブジェクトを確保したいとき
HOGE * a = new HOGE();
HOGE * b = new HOGE();
とするとbの初期化に失敗したときaはリークする。これをtry/catchでカバーするのは難しい。
そこで
auto_ptr<HOGE> tmp_a(new HOGE());
auto_ptr<HOGE> tmp_b(new HOGE());
HOGE* a = tmp_a.release();
HOGE* b = tmp_b.release();
としてやる。
常時オブジェクトを保存しておくための変数としてではなく、例外安全のための一時変数として
auto_ptrは意味がある。
0836830
NGNGもちろん確保したらdeleteしなきゃだめね。ただしdeleteは例外を出さないことを
前提できるし、そうでなくてはいけない。
0837デフォルトの名無しさん
NGNGstd::auto_ptrは場合にもよるがdeleteしなくてもいいのじゃないか?
0838デフォルトの名無しさん
NGNG830では無いが、もうちょっとよく読め
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNGそして人は shared_ptr に流れ着くわけだ。
0841デフォルトの名無しさん
NGNG下の例で、
auto_ptr<HOGE> a(new HOGE());
auto_ptr<HOGE> b(new HOGE());
↑こうしない意図は何?
0842デフォルトの名無しさん
NGNG>HOGE* a = tmp_a.release();
>HOGE* b = tmp_b.release();
なんでわざわざ生ポインタ取り出すの?そのまま使えばいいと思うけど。
あと、auto_ptrは引数、戻り値に使うと便利だと思う。
auto_ptrを知らないひとが使うと火傷するけど……
0843デフォルトの名無しさん
NGNG{
auto_ptr<Hoge> tmp(new Hoge);
//...//
return tmp.release();
}
みたいなのはよくやるな。
0844830
NGNGオブジェクトのコンテナとして使うのであれば確かにauto_ptrよりshared_ptrをお勧めする。
しかしそもそもauto_ptrの本質はrelease()にある。コンテナではない。
0845830
NGNG確かにそうだし、出来ることならそうすればいいと思う。
しかし843のように生ポがほしいときや、多少なりともオーバーヘッドが気になるとき
は取り出してかまわない。
なぜなら先の例はとあるクラスのコンストラクタでの処理だとする(ポインタa,bがメンバとする)。
そのうえでデストラクタに"delete a;delete b;"とすれば例外安全は保障される
これはコンストラクタが完了していれば必ずデストラクタも呼ばれるため。
>auto_ptrは引数、戻り値に
そうだね。おれも使えるときは使っている。ただインターフェース的には一般的でないというか・・・
0846デフォルトの名無しさん
NGNG>auto_ptrの本質はrelease()にある。
そこがわからん。auto_ptrは、その名の通りリソースの自動管理がキモなんじゃないの?
その他にも管理権限の委譲の明確化とかあるけどさ。
0847842
NGNG>しかし843のように生ポがほしいときや、多少なりともオーバーヘッドが気になるとき
>は取り出してかまわない。
いや、確かに生ポインタが欲しければ取り出してもかまわないけど……
オーバーヘッドってそんなにペナルティ大きかったっけ?
間接参照1〜2コ分ぐらいじゃないの?
0848デフォルトの名無しさん
NGNGauto_ptrにオーバーヘッドがあるなんて考えるのはどうかしてる。
例外安全を考慮するなら、メンバにauto_ptr持ったほうがもっと確実。
正直、830は「本当の有効な使い方」を語れるほど知らないように思う。
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNG0851830
NGNGただ取り出してもかまわない条件を示したかっただけ。
0852デフォルトの名無しさん
NGNGauto_ptr< HOGE > const p( new HOGE );
これでもう、scoped_ptr はいらんね…といいたいが…
0853デフォルトの名無しさん
NGNGで、「取り出してもかまわない条件」はひとつも示せてないよな?
それでも「auto_ptrの本質はrelease()にある」と思うの?
0854デフォルトの名無しさん
NGNG?
>>830じゃないのが、お前が勝手に異次元的解釈をしてるだけと違うか?
0855デフォルトの名無しさん
NGNGだれに向かって「お前」っていってるのかわからない。
0856デフォルトの名無しさん
NGNG>>853へ
0857853
NGNG>>854
auto_ptrの本質はデストラクタにあり、release()はただのサービスだと思ってるんで、
>>844(=830)の言う「auto_ptrの本質はrelease()にある」なんてちっとも賛同できないわけよ。
読んだままの意味にしかとらえてないから、「異次元的解釈」なんてしてないつもりだよ。
0858デフォルトの名無しさん
NGNG>>854は無視してください。ごめんなしゃい。
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNGところで本質って何?
0861デフォルトの名無しさん
NGNG数牌は一色で、後は字牌。
0862デフォルトの名無しさん
NGNGもういいよ。取りあえず
C++標準ライブラリ チュートリアル&リファレンス
(The C++ Standard Library: A Tutorial and Reference)
読んどけ。な
0863デフォルトの名無しさん
NGNGお前、夏休みの間の出来事はみんな夏のせいにしてるだろ?
0864デフォルトの名無しさん
NGNG夏厨指定厨というのが存在するのだよ
2chも、もう長いからな
0865830 これで最後にしとく
NGNG俺が言い過ぎた。こんなムキになって噛み付かれるとは思わんかったし。
>>853
一応示したんだが。release()なんて一生使えなくていいもんな。
0866デフォルトの名無しさん
NGNGやっぱりわからん。
コンテナ的な使い方って、ふつうにauto_ptrを保持することだよな?
そういう使い方しか見れないって、ほかにどう見るというんだろう。
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGweak_ptrなんてもんに対応させるため構造が複雑になってる。
0873デフォルトの名無しさん
NGNGsmart_ptr< void > みたいに書かれた場合や、smart_ptr< HOGE > のときの
HOGE に 仮想デストラクタがない場合でも、正しくデストラクタが呼ばれるように、
boost::any みたいな仕組みを用意している。
0874873
NGNG0875デフォルトの名無しさん
NGNG必要ないならお前は簡略化されたの使えばええやん
0876デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNG0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNGどこにあるか?
0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNGboostのtupleで要素の型が欲しいのですが,アクセッサ(?)はないでしょうか?
例えば,
typedef boost::tuples::tuple <short, float> Tuple;
のようにTupleをtypedefしたとき,
typedef hoge <Tuple, 0> First_Type;
typedef hoge <Tuple, 1> Second_Type;
のような形でFirst_Type,Second_Typeを定義するのにhogeみたいなものがあれば嬉しいのですが.
0889888
NGNG上記でFirst_TypeはshortにSecond_Typeはfloatにtypedefされて欲しいです.
0890888
NGNG#include <iostream>
#include <boost/tuple/tuple.hpp>
using namespace std;
typedef boost::tuples::tuple <short, float> Tuple;
typedef boost::tuples::access_traits <boost::tuples::element <0, Tuple>::type>::non_const_type First;
typedef boost::tuples::access_traits <boost::tuples::element <0, Tuple>::type>::const_type const_First;
typedef boost::tuples::access_traits <boost::tuples::element <1, Tuple>::type>::non_const_type Second;
typedef boost::tuples::access_traits <boost::tuples::element <1, Tuple>::type>::const_type const_Second;
int main () {
cout << (typeid (short) == typeid (First)) << endl;
cout << (typeid (short) == typeid (const_First)) << endl;
cout << (typeid (float) == typeid (Second)) << endl;
cout << (typeid (float) == typeid (const_Second)) << endl;
return 0;
}
過去に調べたかどうかですら忘れてしまうとは.orz
0891888
NGNG結局,888で欲したhogeはelementでした.
typedef boost::tuples::tuple <short, float> Tuple;
typedef boost::tuples::element <0, Tuple>::type First;
typedef boost::tuples::element <1, Tuple>::type Second;
失礼致しました.
0892デフォルトの名無しさん
NGNG> >>32
> Modern C++ Designを読みましょう。
> 第4章「小規模オブジェクトの割り当て」当たりがお勧め。
あのメモリアロケータってデフォルトのnewより遅いゴミアロケータ。
Modern C++は昔すごいと思っていたけど、今思うとあまりにもマニアック過ぎると思う。
さしあたり、STLやboostの便利なライブラリを使っていれば十分と思った。
Effective STLはそういう意味で良い本だと思う。 boostについてもEffectiveみたいな
ノリで書いた本があれば重宝すると思う。
0893デフォルトの名無しさん
NGNG> > 第4章「小規模オブジェクトの割り当て」当たりがお勧め。
>
> あのメモリアロケータってデフォルトのnewより遅いゴミアロケータ。
普通、遅くても良いからメモリ効率の良いを目指すんじゃないのか?
小さいオブジェクトのアロケータは。
0894デフォルトの名無しさん
NGNGほんよんでねーだろ
0895デフォルトの名無しさん
NGNGModernでは速いのを目指してなかったっけ?
0896デフォルトの名無しさん
NGNG本読んでないだろ、っつーのはともかくとして
> 普通、遅くても良いからメモリ効率の良いを目指すんじゃないのか?
STLport の node allocator なんかは、逆だね。メモリ効率を犠牲にして
速度を稼いでる。
STL コンテナには基本的にデカいオブジェクトを格納しない (たいてい shared_ptr
とか小さいオブジェクトを入れる) から、それで良いんだけど。
0897デフォルトの名無しさん
NGNG空間効率、速度効率、どちらにも良いのを目指してたと思う。
0898デフォルトの名無しさん
NGNGそういうわけでもないのかね??
0899デフォルトの名無しさん
NGNGReconsidering Custom Memory Allocation
http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf
0900デフォルトの名無しさん
NGNGModernはSTLやboostみたいなものを作る側の人が読めばいいよねえ。
boost::lambda級の大物を作るときは確かに役に立ちそう。
0901デフォルトの名無しさん
NGNG遠回しに日本で書かれたboost本があまりにもショボすぎると言っているわけですね
0902デフォルトの名無しさん
NGNGなんでそんなに粘着なん?
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG本なんてそんなもんだよ。
萌え単だってそうだろ。
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG別に人が何で儲けても良いじゃん。こっちの取り分が減るわけじゃなし。
0910デフォルトの名無しさん
NGNG実生活で自分より儲けてない奴としか付き合わないとか?
0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG適当な時期が到来するまで、積んでおけ。まだ読むべきタイミングでは
なかったということだ。
0913デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNGModern C++ Design を半年 ROM しろ
0915デフォルトの名無しさん
NGNG却下。intrusive_ptrは簡略化されたshared_ptrではない。
すでに参照回数を保持しているオブジェクトに対し使うものだ。
もう一度聞く。どこにあるか?
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG> もう一度聞く。どこにあるか?
必死だな。
0918デフォルトの名無しさん
NGNGなんか中国人っぽいある
0919デフォルトの名無しさん
NGNGぬるぽ
0920デフォルトの名無しさん
NGNG余計な仕様を除いたら生成速度が2倍近くになった。
標準に近いものがあるなら教えてほしい。
>>916
それをしたくないからintrusive_ptrでなくshared_ptrをつかう。論外。
>>916
煽ったつもりか?夏だから暇なのかもしれないが。
0921920
NGNG0922デフォルトの名無しさん
NGNGならshared_ptrを使った方がいいんじゃない?
まぁプロファイル等とって、スマートポインタ生成の部分が
どうしてもボトルネックになってるってなら自作もしょうがないかもしれんけど
0923デフォルトの名無しさん
NGNGアクセス速度は生ポインタの10倍以上
生成速度は生ポインタの数十倍〜100倍以上
0924デフォルトの名無しさん
NGNGついでに環境も教えてくれ
0925デフォルトの名無しさん
NGNGデバッグ版でプロファイルしてるだろ
0926920
NGNGhttp://www.boost.org/libs/smart_ptr/test/smart_ptr_test.cpp
を改変したもの。私の環境はCPUがAthronXP-M1800+ 224MB コンパイラはgcc version 3.3.3 (mingw special)
SL:シングルリスト型スマートポインタ, DL:ダブルリスト型〜, IC:非直接計数型〜, DC:直接計数型〜, SH:boost::shared_ptr, Raw:生
・・・これはアクセス速度とコピーを見る。あんま変わらないかも。
sets, objects, operates:( SL, DL, IC, DC, SH, Raw )
1, 10000000, 20000000:( 2.863, 2.433, 6.578, 5.828, 6.520, 1.442 )
2, 5000000, 20000000:( 2.574, 1.994, 4.016, 3.034, 3.885, 0.681 )
4, 2500000, 20000000:( 2.244, 1.392, 2.733, 2.133, 2.514, 0.340 )
6, 1670000, 20040000:( 2.282, 1.323, 2.151, 1.713, 1.984, 0.281 )
8, 1250000, 20000000:( 2.384, 1.082, 1.783, 1.592, 1.763, 0.281 )
10, 1000000, 20000000:( 2.634, 1.091, 1.592, 1.332, 1.572, 0.170 )
15, 670000, 20100000:( 2.924, 1.082, 1.562, 1.161, 1.391, 0.150 )
30, 335000, 20100000:( 4.136, 0.981, 1.292, 1.012, 1.262, 0.140 )
50, 200000, 20000000:( 6.079, 0.901, 1.302, 0.982, 1.170, 0.111 )
100, 100000, 20000000:( 10.284, 0.922, 1.191, 0.962, 1.292, 0.110 )
0927デフォルトの名無しさん
NGNGぃょぅ
0929デフォルトの名無しさん
NGNGやっぱ生ポインタの10倍は遅いか。
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNG教えてあもーれ
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNG文字列配列を使いたい場合はどうしてますか?
0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNG0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNG空文字列とは別に無効値を定義したい? それなら boost::optional の
出番じゃないかね。あるいは
string getString() { return error ? 無効な値 : 有効な値; }
みたいな関数を作ろうとして困ってるなら、そもそも文字列を戻り値にしない。
必ず bool を戻り値にして、設定する文字列は関数引数に参照渡しするか、
エラー発生時点で例外投げちゃう。
0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNGみたいなNULL文字が混じった文字列が使いたいって事じゃないの?
0942デフォルトの名無しさん
NGNGstd::string(NULL) 見た目で最も「stringでNULLを扱う」にマッチする。これ最狂。
0943デフォルトの名無しさん
NGNGその手もアリだが、個人的にはお勧めしない。エラーチェックのコードが
そこら中に散らばって煩雑になりがちだから。
0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNG典型的なセキュリティホールの生成過程
0947932
NGNGstd::vector<std::string> &array
array.push_back(strtok(NULL, " "));
とした時NULLが入ってきてエラーになってしまうんです、、
単純に
char ch = NULL;
array.push_back(ch);
ということはできないんですよね?
0948デフォルトの名無しさん
NGNGひぎぃっ!
>>945
んなもん、誰も判らんわ。
0949デフォルトの名無しさん
NGNG> std::vector<std::string> &array
> array.push_back(strtok(NULL, " "));
> とした時NULLが入ってきてエラーになってしまうんです、、
strtokなんて標準C規格の癌みたいな関数使うなYO!
> char ch = NULL;
変数がポインタじゃありませんが?
0950デフォルトの名無しさん
NGNG> char ch = NULL;
おい待て。そもそも NULL は「何も指してないポインタ」のことで、文字列の
終端は '\0' だぞ。
C++ だと様々な都合から、大抵の処理系で #define NULL 0 されてるから
うっかり char ch = NULL; もコンパイル通るが、意味的にはコンパイルエラーに
されても文句言えん。
0951デフォルトの名無しさん
NGNGそんなもん、NULLかどうかpush_backの前にチェックしろよ。
0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNG0955932
NGNG0956デフォルトの名無しさん
NGNGCでも使わないよ。バグってるんだもん。
A,B,,Dみたいなレコードがうまく拾えなかったり。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGそうだな、CだろうがC++だろうが使わない。
まず関数のシグネチャが腐っていて(関数内にstatic変数で状態を抱える)
マルチスレッド環境で使えないのは誰の目にも自明。
それと、「パース処理」をあーいう関数でおこなうこと自体がbad idea。
パーサは、1文字づつ読んで状態遷移するように書くのが定石。それを分
かった上でstrtok_r()で手抜きするのは、使い捨てコードなら止めないが
932は使っちゃダメ、絶対。
0959デフォルトの名無しさん
NGNGムリヤリつなげてみよう。
ttp://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#466
こんなこと言い出したらキリが無いだろうに。
0960デフォルトの名無しさん
NGNGへぇ〜
勉強になりますた。
0961デフォルトの名無しさん
NGNGスレ違いながら勉強になりました
0962932
NGNGなんですけどね、、
0963デフォルトの名無しさん
NGNG0964932
NGNGMFCは使いたくないと思ってしまいまして、、STLを勉強しようかと思いまして。
0965デフォルトの名無しさん
NGNGむかつくのは解かるが、そういう返答は的外れだと思う。
>>964
書き込む前に、質問の内容を自分以外が理解できるか、推敲とか反芻とかしましょう。
0966932
NGNGそうしまつ。みなさんアリガトウ(。´Д⊂)
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGistringstream + skipwsで十分。
0970デフォルトの名無しさん
NGNG調べてから聞け
脊髄反射するな
スレを汚すな
0971デフォルトの名無しさん
NGNG>
> >>968 何ですかそれ?
インターネットの常識も勉強したほうが良いですね。
この書き込みを見ると、何だか某M女史の「どうやったら退会できますか」を思い出します。
0972デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG次スレ<typename iTa>は放置の方向で。
0976デフォルトの名無しさん
NGNGstring str; ifstream fi(file);
if >> str;
これをistream_iterator<string>でも同様に動くことを期待して
vector<string> v;
copy(istream_iterator<string>(fi), istream_iterator<string>(), back_inserter(v));
としてみたのですが、強制終了されてしまいます。
上のようにvectorに一行ずつコピーするにはどのようにすれば
思い通りの結果となるのでしょうか?
どうかよろしくお願いいたします
0977デフォルトの名無しさん
NGNG環境は?
fi がすでにファイル末端だったりはしないの?
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG使えるかどうかってどういう意味?
0980デフォルトの名無しさん
NGNG0981976
NGNG環境はVisualStudio.NET 2002をそのまま使っています
ifstreamを作ってからすぐにやっているので先頭だと思うのですが
これで出来るということは自分のプログラムにおかしな部分が
ありそうなのでもう一度確認したいと思います
>>978
今のところはvectorに保存しようと思っております
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。