【C++】template 統合スレ -- Part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG以下のスレッドを統合するスレです。
STLスレッド
Part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 http://pc3.2ch.net/test/read.cgi/tech/1026793823/
【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/
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/
関連スレ、その他リンクは >>2-5 あたりに。
0002デフォルトの名無しさん
NGNGC++相談室 part17
http://pc2.2ch.net/test/read.cgi/tech/1047560042/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デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047927332/
0006デフォルトの名無しさん
NGNGHSPかよ!!
0007デフォルトの名無しさん
NGNG【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG新スレヨロ
0011デフォルトの名無しさん
NGNG( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>10
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGというか、shared_ptrから別の型のポインタにキャストする方法を
教えてください。
0015デフォルトの名無しさん
NGNGget()
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGtemplate<typename T, typename U>
shared_ptr<T> shared_static_cast(shared_ptr<U> const & r); // never throws
template<typename T, typename U>
shared_ptr<T> shared_dynamic_cast(shared_ptr<U> const & r);
template<typename T, typename U>
shared_ptr<T> shared_polymorphic_cast(shared_ptr<U> const & r);
template<typename T, typename U>
shared_ptr<T> shared_polymorphic_downcast(shared_ptr<U> const & r); // never throws
0018デフォルトの名無しさん
NGNGところでなんで>>16のやつって間に&が必要なんですか?
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGvoid Foo(const std::vector<std::string>& v)
{
std::vector<std::string>::iterator it;
for(it = const_cast<std::vector<std::string>::iterator>(v.begin()); it != v.end(); ++it){
...
}
}
で、
error C2440: 'const_cast' :
ってでます。
VC6付属のSTLではリリースビルド、デバッグビルドともにエラーは出ません。
STLPortを使った時もリリースビルドならエラーは出ません。
今はifdefでSTLPort使てた時Debugビルドの時だけ
void Foo(std::vector<std::string>& v)
{
std::vector<std::string>::iterator it;
for(it = v.begin(); it != v.end(); ++it){
...
}
}
とconstを外したものを使うようにしていますが
ソースが見にくくてしょうがないです。
何か良い方法はありませんか?
0021デフォルトの名無しさん
NGNG{
std::vector<std::string>::const_iterator it,last;
for(it = v.begin(); it != last; ++it){
...
}
}
つーかSTLをもっとちゃんと勉強しましょう
Effective STLとかね
0022デフォルトの名無しさん
NGNGlast=v.end()
を追加してくれーーーーーー
0023デフォルトの名無しさん
NGNGありがとうございます。
>>つーかSTLをもっとちゃんと勉強しましょう
つくづく実感しました。
0024デフォルトの名無しさん
NGNG#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/bind.hpp>
#include <boost/mem_fn.hpp>
#include <boost/lambda/lambda.hpp>
int main(int argc, char** argv) {
std::vector<char*> v;
std::for_each(argv, argv + argc, boost::bind(boost::mem_fn(&std::vector<char*>::push_back), &v, _1));
std::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1 << std::endl);
return 0;
}
0025デフォルトの名無しさん
NGNGstd::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1 << '\n');
で我慢しとけ。
std::endl は認識できない。
0026デフォルトの名無しさん
NGNG少ないような気がする。
0027デフォルトの名無しさん
NGNG気のせい。
0028デフォルトの名無しさん
NGNGというリストから、ls.erase(iter)などで要素を削除するときに、
リストから削除されるのは、基本的にポインタだけなのですよね。
このようなスマートポインタの場合、ちゃんとポインタが指すオブジェクトも
解放されるのですか?
また、普通のポインタの場合は、ちゃんと自分でdeleteもしないといけないのですか?
0029デフォルトの名無しさん
NGNGスマートポインタの場合、ちゃんとポインタが指すオブジェクトも解放されるのです。
普通のポインタの場合は、ちゃんと自分でdeleteもしないといけないのです。
003024
NGNGサンクス。でも何だか悔しい…(´・ω・`)ショボーン
>>26
そうかなぁ、俺は逆に for 使って書く方が少ないかも。
int hoge[] = {0, 1, 2, 3, 4};
for (i = hoge.begin() ; i != hoge.end() ; ++i) {
....
}
って書けんだろ?やってる事が同じなのに、コンテナに入ってるか
配列に入ってるかの違いだけで、アクセスする方法も変わるのは、
なんだか美しくない気がする(なんじゃそりゃ)。
0031デフォルトの名無しさん
NGNGlambdaに << std::endl; が通らないのは、よくわからんが
endlのテンプレート・パラメータがうまく解決できてないからのような
気がする。boost::lambdaが改良されればこのコードも通ると思う。
0032デフォルトの名無しさん
NGNGboost::arrayを使えばいいやん
0033デフォルトの名無しさん
NGNG思ったら pooma 生きてんじゃん!!
ttp://www.codesourcery.com/pooma/pooma
感動age
0034デフォルトの名無しさん
NGNGまさかNULLとか関係ないポインタを代入させて(参照を0にすることで)
解放するわけじゃあないですよね。
0035デフォルトの名無しさん
NGNGQ.Why doesn't shared_ptr provide a release() function?
A.shared_ptr cannot give away ownership unless it's unique()
because the other copy will still destroy the object.
とDOC中にありますので、明示的な解放はヤバイという事です。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGそれも危なげ。
class A {
public:
A() { std::cout << "A()" << std::endl; }
~A() { std::cout << "~A()" << std::endl; }
};
int main()
{
boost::shared_ptr<A> a(new A);
boost::shared_ptr<A> b(a);
std::cout << a.use_count() << std::endl;
a.reset((A*)0);
std::cout << b.use_count() << std::endl;
}
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG{
boost::shared_ptr<A> a(new A);
boost::shared_ptr<A> b(a);
std::cout << a.use_count() << std::endl;
std::cout << *b->p << std::endl;
a.reset((A*)0);
std::cout << b.use_count() << std::endl;
std::cout << *b->p << std::endl; // あぼ〜ん!!
}
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGだったらスマートポインタなんて使うなYO!
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGデカいデータを扱った時とか。100% 開放してくれるわけじゃないし。
0049デフォルトの名無しさん
NGNGあるオブジェクトを指定して解放というのは一般的な言語でできるの?
0050デフォルトの名無しさん
NGNG> デカいデータを扱った時とか。100% 開放してくれるわけじゃないし。
って何だ?相互参照しまくりって事か?
0051デフォルトの名無しさん
NGNGBoehm GC。ていうか C++ スレだし。
>>50
参照されてないからって100%開放されるわけじゃないよ。
0052デフォルトの名無しさん
NGNG参照が0になれば開放されるのかと思っていた
0053デフォルトの名無しさん
NGNGいや、開放されないのは GC だって…文脈読んでくれよ…。
shared_ptr はメモリリークしない??
005450
NGNG並行してるのか?
>>51
どーゆー時に開放されないのか教えてたもれ。
ソース追った感じだとリファレンスカウントゼロになった時点で
checked_delete(ptr)、すなわち delete p が呼ばれてるようだが・・・
0055デフォルトの名無しさん
NGNGその通りだよ。下のプログラムではaもbも0にリセットした途端に
Aのデストラクタが呼ばれる。
int main()
{
boost::shared_ptr<A> a(new A);
boost::shared_ptr<A> b(a);
std::cout << a.use_count() << std::endl;
std::cout << *b->p << std::endl;
a.reset((A*)0);
std::cout << *b->p << std::endl;
std::cout << b.use_count() << std::endl;
b.reset((A*)0);
std::cout << "still running." << std::endl;
}
0057デフォルトの名無しさん
NGNGboost::shared_ptrのDOCを隅から隅まで読んでみたが、確かに
「参照している数が0になった途端にデストラクタが呼ばれる」とは
どこにも書いてないね。
メモリリークを起こさず、CopyConstructible and Assignable なので
標準コンテナに入れられるような事しか書いてない。
0058デフォルトの名無しさん
NGNG>参照されてないからって100%開放されるわけじゃないよ
これはおそらくBoehm GCが保守的なGCを行っているので(他のゴミ値がオブジェクトへのポインタの可能性があるので)
そういったのだと思う
005950=54=56
NGNG> shared_ptr の話だろ?
と書いたら>51で
> >>50
> 参照されてないからって100%開放されるわけじゃないよ。
と書かれたんだから、
「shared_ptr でも参照されてない時でも開放されない場合がある」
って>51は言ってるんだよな?ここで
「『ガベコレの場合は』参照されていない時でも(まだ)開放されない場合がある」
とか言ってるわけじゃないんだろ?とりあえず>51降臨してくれ。
気になって夜も眠れ・・・たけどさ(w
# もし>53=>51なら文脈読めてないのは>53の方なわけだが…
なんかアラシみたいになってスマソ
006059
NGNG0062デフォルトの名無しさん
NGNGどうすればいいのだ?
0063デフォルトの名無しさん
NGNG0064sage
NGNG// ima sugu
delete p;
0065デフォルトの名無しさん
NGNG一度は費用対効果というものを真剣に考えてみる必要がある。
習得コストや可読性を考えるとほとんどの開発者が
コストを回収しきれていないのが現実。
そのコストを貴重な休日で穴埋めしたいならそれでもいいけどさ。
0066デフォルトの名無しさん
NGNGvc7ってtemplateの部分特殊化みとめてないんですね。
0067デフォルトの名無しさん
NGNGコピペウザイ
0068デフォルトの名無しさん
NGNGマジレスすると標準ライブラリだけでゴリゴリ書いてるコードの方が
汚なくて読めないし、生産効率も悪い。
ほとんど同じコードをダラダラ書いてるのが綺麗だとでも思ってんの?
セオリックをまとめた外部ライブラリは習得しても無駄じゃない。
// いや、メタプログラミングとかはアレだけさ
0069デフォルトの名無しさん
NGNGそのshared_ptrが指すオブジェクトがあって
そのオブジェクトを指す、すべてのshared_ptrを今すぐ廃棄する
0070デフォルトの名無しさん
NGNG非標準ライブラリってそう簡単に導入できるものじゃないと思うけど。
実際に導入したプロジェクトの規模・人数・ライブラリの種類ってどんなもんなの?
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGバグ取りとか大変そうですね
0073デフォルトの名無しさん
NGNGごちそうを目の前にして食べられずにいるような心理状態か。
まあマ板向けの話題だな。
0074デフォルトの名無しさん
NGNGAPI直書きですか?
それでMFCとか使ってたら笑えるけどな
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGその人たちが言うにはSTLなんて信用できないそうだ
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG厨がSTLを使って書いたコードは信頼出来ない
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG使うにはどうしたらよいのでしょうか?
一時変数を使うしかないですか?
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGカウンタ値がおかしくなるに一票
0083デフォルトの名無しさん
NGNG渡されたAPIがshared_ptrのカウンタに干渉する可能性は無いわけだが。
0084デフォルトの名無しさん
NGNGshared_ptr<T> p( new T());
f(p.get());
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNGT *p;
func(&p);
sp.reset(p);
0087デフォルトの名無しさん
NGNGそのAPIから返されたポインタをdeleteで削除することにしていいのか?
そういう引数を使って返すということは、freeか専用の解放APIとかじゃないか?
0088デフォルトの名無しさん
NGNGひょっとしてDirectXとかのCOMのAPIじゃないの?
だとしたらCComPtrがいい。COMに適したスマートポインタ
違っていたらまことにあいすまん
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGワラタ
のりのいいプルグラマ(・∀・)イイ!!
0096デフォルトの名無しさん
NGNG君もね
0097sage
NGNG業務で使うのがVC6/7なんで試そうかどうか悩み中。
誰か試してないか?
0098デフォルトの名無しさん
NGNGboost::spiritは1.30から加わったパーサもどきらしいですね。
今Boost-jpで日本語訳をするかどうか検討中。
#それよりも1.29の訳を早く終わらせねば。
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGenumは整数の列挙
100gat
0101デフォルトの名無しさん
NGNGあれ、「もどき」なのか?
0102デフォルトの名無しさん
NGNG俺もよくわからん。cppllでパーサとして使えるというのが流れて
いたから。もどきではなくてもしかして本物か?
そうするとC++でPHPなんか書けてしまうとか?
0103ヽ(´ー`)ノ
NGNGhttp://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/libs/spirit/example/application/
0104デフォルトの名無しさん
NGNGBoost1.30出てるから、落として解凍した方がいいよ。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGみなさんは必要なときどうやっていますか?
足し算引き算くらいだったら自分で作れるけど、
巨大な数と巨大な数の割り算とか実装するのは大変なので。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0110ヽ(´ー`)ノ
NGNGありがとう、落としてみたよ。19日に 1.30 出てたんだね。
新しく増えてるモノで遊んでます。
>>106
boost::rational のドキュメントに、
> Note: Should the boost library support an unlimited-precision integer
> type in the future
とあるので、将来的には boost::integer なんてできるかも、できないかも。
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGGMPでもMintでも好きなのを使えばよい。
0113デフォルトの名無しさん
NGNGboost-sandbox にある bigint はどう?
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost-sandbox/boost-sandbox/boost/bigint.hpp?rev=HEAD&content-type=text/vnd.viewcvs-markup
0114デフォルトの名無しさん
NGNGSaGaかな…難しいとこだが…
0115デフォルトの名無しさん
NGNG標準C++ライブラリで、うまいことワイド文字(列)をマルチバイト文字(列)に
変換したり、その逆の処理をするクラスないし関数ありませんか?
0116デフォルトの名無しさん
NGNGここ template スレだから。
0117デフォルトの名無しさん
NGNG微妙にスレ違いだが、テンプレートを利用するなら、std::ctype を使えばいいかも。
std::wstring source = L"(・∀・)";
std::string result( source.size(), char() );
const std::ctype< wchar_t >& ct = use_facet<std::ctype<char> >( std::locale() );
ct.narrow(source.data(),source.data()+source.size(),' ',&result[0]);
assert( result == "(・∀・)" );
うまく良くかは知らん。
0118117
NGNGいろいろ手直しして、VC++.NET で動作確認。
std::localeloc( "japanese" );
std::locale::global( loc );
std::wstring source( L"(・∀・)" );
std::string result( source.size()*2, char() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.narrow( &*source.begin(),&*source.end(),'?',&result[0]);
std::wcout << L"wide : " << source << std::endl;
std::cout << "narrow : " << result << std::endl;
結果
wide : (・∀・)
narrow : (・∀・)
0119117
NGNGstd::string source( "(・∀・)" );
std::wstring result( source.size(), wchar_t() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.widen( &*source.begin(),&*source.end(),&result[0]);
とすればいい。
おしまい。
0120デフォルトの名無しさん
NGNG実際にはほとんどの環境で使えない罠。
0122デフォルトの名無しさん
NGNG【質問】
下記のTYPENAMEにはクラスDDDDを継承した物が入らなければならない、
という事を実装する方法はありますか?
もし、ありましたらそれを教えてください。
template < typename TYPENAME > class AAAA {};
class BBBB : public DDDD {};
class CCCC {};
class DDDD {};
AAAA<BBBB> aaaa_bbbb; // ok
AAAA<CCCC> aaaa_cccc;// ng
AAAA<DDDD> aaaa_dddd; // ok
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGLokiでSUPERSUBCLASSとSelectorを組み合わせて・・とか
0125デフォルトの名無しさん
NGNGSTATIC_CHECK(SUPERSUBCLASS(DDDD, TYPENAME), TYPENAME_must_be_a_subclass_of_DDDD);
0126122
NGNGどうもありがとう。
0127デフォルトの名無しさん
NGNGのときはコンパイルエラーになるんだね。
class Base{ };
class Derived1 : public Base { };
class Derived2 : public Base { };
class DerivedD : public Derived1, public Derived2 { };
SUPERSUBCLASS(Base, DerivedD);
↑
これダメ
0128デフォルトの名無しさん
NGNGclass Derived2 : virtual public Base { };
じゃねーのか?
0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNGもちろんそれならOK
>>129
わざわざLokiを持ち出す必要がないときは
それがお手軽でいいね。
0131デフォルトの名無しさん
NGNG言語が変わったと思うくらい感動してるのですが…。
VC6のメンバ自動表示が効かなくなるのは
やはりどうしようもないのでしょうか?
boost::shared_ptr<MyClass> mc( new MyClass() );
mc->
↑ここでいつも出るやつです。
0132sage
NGNG0133デフォルトの名無しさん
NGNGガックリ_| ̄|〜〜○ヌルポー
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGmc.operator->()->
とかってすれ。で、メンバを選択後、".operator->()" を削除すると。・・・うざー。
0137デフォルトの名無しさん
NGNG試したけど、出ない気がする…
0138デフォルトの名無しさん
NGNGあと、shared_ptr系のポインタ欲しい場合
HOGE* func(){
shared_ptr<HOGE > hoge_sp(new HOGE );
return hoge_sp.get();
}
//HOGE*が デリートされたらマズー?
shared_ptr<HOGE > func(){
shared_ptr<HOGE > hoge_sp(new HOGE );
return hoge_sp;
}
//なんかカウンタがあやしいことになtってそー
//返り値でエラーのチェックもできなそー
void func( shared_ptr<HOGE >& hoge_sp ){
hoge_sp =shared_ptr<HOGE >( new HOGE );
}
//引数とるのめんどくさーーー。
の、どれが適当でつか?ていうか、みなさんどういう風にしてます?
0139デフォルトの名無しさん
NGNGreturn shared_ptr<HOGE >(new HOGE );
}
0140デフォルトの名無しさん
NGNG> shared_ptr<HOGE > func(){
> shared_ptr<HOGE > hoge_sp(new HOGE );
>
> return hoge_sp;
> }
に何の問題があるのかさっぱりわからんのだが?
0141138
NGNGえーと、 func の中でfucn2を実行して,func2がうまくいった場合のみポインタかえしたんだけど、
失敗したら、shared_ptrにNULLポインタ代入できないからどうしましょうと、、、、
shared_ptr<HOGE > func(){
if( ! func2 ){
shared_ptr<HOGE > hoge_sp(new HOGE );
hoge_sp.get().m_is_func2 = true
hoge_sp.get()->Init();//func2がうまくいったのでhoge_spの処理などしてみる
return hoge_sp;
}
else{
//func2 が失敗したから なんか失敗したことを返したいのだが。。。
//thorwはなしの方向で・・・・。
shared_ptr<HOGE > hoge_sp(new HOGE ); //とりあえず new?
hoge_sp.get().m_is_func2 = false;
return hoge_sp;
}
}
なんか激しく違う感じが。。。
普通はnewしたあとに何らかの処理をしないで、すぐreturn するもん?
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGhttp://www005.upp.so-net.ne.jp/episteme/html/stlprog/
ガイシュツ?
0144デフォルトの名無しさん
NGNG既出ではないが、遅すぎ。
あと、それを示すなら↓これを忘れちゃいかんよ。
Standard Template Library プログラミング をコキおろすスレ
http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=5651&KEY=1048756904
0145デフォルトの名無しさん
NGNGよくわからんが、お前が書いた文章を最大限に汲み取って考えると、こうか?
shared_ptr<HOGE > func(){
shared_ptr<HOGE > hoge_sp;
if( ! func2() ){
hoge_sp.reset(new HOGE );
hoge_sp->Init();
}
return hoge_sp;
}
0146138
NGNGそんな感じ。
int test()
{
shared_ptr<HOGE > ret = func();
if(hoge.get()== NULL) return "アボーン";
}
でいいのか・・・。
みなさん、ども、ありがとうございますた。
ていうか、実はC言語でも使えるように _std_callとかつかってshered_ptrが握ってる
ポインタ返す場合どうしたらよろしいのかと、思ったわけでして、
shared_ptr<HOGE > func();
以外の方法ないのかなーと、聞こうとして、ぜんぜん別な こと聞いてマスタ。
0147138
NGNG今、boost::optional みてみた。
いいすね、これ。
0148デフォルトの名無しさん
NGNGそのコードもはてしなく意味不明だがともかく、
hoge = shared_ptr<HOGE>(); // 何もポインタを突っ込んでないshared_ptrはNULL扱いになる
if( !hoge ) return "アボーン"; // get() しないでも ! でnullチェックできる
くらいは覚えといた方がいいぞ。
> ていうか、実はC言語でも使えるように _std_callとかつかってshered_ptrが握ってる
> ポインタ返す場合どうしたらよろしいのかと、思ったわけでして、
自分のコードじゃない外部の関数に渡すその瞬間で、
shared_ptr<>のget()を使って生ポインタに戻すので大抵は十分だと思われ。
0149デフォルトの名無しさん
NGNG↑こんなん書いといて、「thorwはなしの方向」って、そりゃムリだ。
0150138
NGNGドキュメントとソースきちんと除いてから、でなおしてきます。
0151デフォルトの名無しさん
NGNGどっち買った方がいいかなぁ。資金的に両方は無理なのよ。
0152デフォルトの名無しさん
NGNG前者はLokiのデザインパターンを中心に書かれている。初心者には無理。
後者はSTLの本当に基本的な部分が詳細に書かれている。初心者向き。
本当は両方欲しいんだけどね・・・・全然傾向が違う本だから。
0153151
NGNGthx. じゃ、Genericの方にしとこうっと・・・
ま、今日株が下がらなければ両方20冊ずつぐらい買えたのだが・゜・(ノД`)・゜・。
小泉とブッシュは早く氏ね
0154名無しさん@XEmacs
NGNG仕様はけっこう固まったよね。
http://www.cuj.com/experts/2012/sutter.htm
// ちなみに仕事で使うわけではありません。
0155デフォルトの名無しさん
NGNGvectorのreserve等で確保した領域を、
明示的に解放する方法というのは無いのでしょうか?
0156デフォルトの名無しさん
NGNGこうやると大抵縮んでくれるよ。処理系によってはこれでも駄目な場合が
あるから一応確認してね。
int main()
{
std::vector<int> v;
v.reserve(1000);
std::cout << "capacity = " << v.capacity() << std::endl;
std::vector<int>(v.begin(), v.end()).swap(v);
std::cout << "capacity = " << v.capacity() << std::endl;
}
0157デフォルトの名無しさん
NGNGこう書いた方が簡単だね。
0158155
NGNGすいません、理解するのに時間がかかりそうなので、
先にお礼をさせてください。レスありがとうございました。
しかし、これはすごい・・・・荒技ですね。
ちょっと恐かったりも(笑
0159デフォルトの名無しさん
NGNG内部的にはリストか何か保持してるの?
0160デフォルトの名無しさん
NGNGEffective STLの17項「swap技法」というのを読んでご覧。
>>159
赤黒木で深さ優先探索というのをやっている物が多いそうだ。
0161デフォルトの名無しさん
NGNGさすが凄いことしてるな。ちょっと勉強してみるか。がりがと。
0162デフォルトの名無しさん
NGNG参考資料の紹介ありがとうございます。
早速図書館で調べてきます。
0163デフォルトの名無しさん
NGNGなんでこれで縮むんだろうか?
わからん・・・
0164デフォルトの名無しさん
NGNG確か、allocator_typeが同じであれば
単に内部配列のポインターを入れ替えてる
だけだったハズ。処理系にもよるけど。
>std::vector<int>(v).swap(v);
コンストラクタでいきなりメンバー呼び出してもOKなの?
…しらんかった…。
0165デフォルトの名無しさん
NGNGコンストラクタで呼び出しているのではなく、
キャストによってできあがった一時オブジェクトに対してメンバーを呼び出しているんです。
0166デフォルトの名無しさん
NGNG>キャスト
ああぁ…そういうことか。
すばらスィ勘違い。
つっこみTHX
0167デフォルトの名無しさん
NGNGv.swap(vector<int>(v));
>>164
std::stringとかでよく、s1 + s2 + s3;などと書くのと一緒。
これは結局、std::string(s1 + s2).operator+(s3);
0168デフォルトの名無しさん
NGNG一時オブジェクトは非const参照で渡せなかった・・・
0169164
NGNGヤパーリコンストラクタだった…。
#include <iostream>
using namespace std;
struct clsA{
clsA(){cout<<"clsA::clsA()"<<endl;}
clsA(const clsA& a){cout<<"clsA::clsA(const clsA&)"<<endl;}
void swap(clsA& a){cout<<"clsA::swap(clsA&)"<<endl;}
operator clsA(){cout<<"clsA::operator clsA() const"<<endl;return *this;}
operator clsA&(){cout<<"clsA::operator clsA&() const"<<endl;return *this;}
};
void main(void)
{
clsA a;
clsA(a).swap(a);
}
----
clsA::clsA()
clsA::clsA(const clsA&)
clsA::swap(clsA&)
(コンパイラ:VC5)
でもそうなるとなぜclsA a.swap(a);がダメなのかよくわからん…。
ってか、スレ違いでスマソ。
0170164
NGNG○:でもそうなるとなぜclsA a().swap(a);がダメ
0171デフォルトの名無しさん
NGNGそれやると a が空っぽになっちゃうだろ。
0173デフォルトの名無しさん
NGNG"public: __thiscall _STL::basic_string<char,class _STL::char_traits<char>,
class _STL::allocator<char> >::~basic_string<char,class _STL::char_traits<char>,
class _STL::allocator<char> >(void)"
(??1?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@QAE@XZ)
は既に定義されています。
意味がわからない
0174デフォルトの名無しさん
NGNGですね
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNGコンストラクタだった、ではない。
キャストのときには一時オブジェクト作成のためにコンストラクタが呼ばれるってだけ。
0177デフォルトの名無しさん
NGNGclsA(a)がキャスト?
clsA(a)は、"Explicit type conversion (functional notation)"
(clsA)aは、"Explicit type conversion (cast notation)"
なんだが、前者をキャストと呼ぶのか?
0178デフォルトの名無しさん
NGNGstatic_cast<int>(0) // キャスト
static_cast<std::string>("foo")// キャストだが呼ばれるのはコンストラクタ
int(0)//関数スタイルのキャスト
clsA(a)(aはclsAのインスタンス)をキャストと呼ぶのは違和感あるけどね。
0181デフォルトの名無しさん
NGNG「明示的型変換」も式。
「型変換」は動作。
「コンストラクタ」は関数。
キャストまたは明示的型変換で型変換が行われる。
型変換にはコンストラクタが使われる。
・・・ということでよろしいか?
0182164
NGNGホントだ。
なんかキャストとコンストラクタ
の境界があいまいになってきた(w
>>165
>コンストラクタで呼び出しているのではなく、
粘着だけど、ヤパーリコンストラクタ。
ちなみにこれ↓でもOK。
clsA().swap(a); //デフォルトコンストラクタ+メンバ呼び出し
clsA(val1, val2).swap(a); //2引数以上のコンストラクタ+メンバ呼び出し
(VC5)
0183デフォルトの名無しさん
NGNG>>181で納得できないのか?
0184デフォルトの名無しさん
NGNG>clsA().swap(a);
型変換ではないだろ
0185デフォルトの名無しさん
NGNG便利でありがたいのだが…
引数でしか推測しないのかな?
戻り値ではだめっぽいのだが
template<typename T>
inline T
f(const char *s)
{
return reinterpret_cast<T>(g(s));
}
0186デフォルトの名無しさん
NGNG戻り値で推測ができないこともない
0187185
NGNGどういうこと?
推測ができないこともないのは
コンパイラベンダの努力しだい?
それともプログラマの努力しだい?
template<typename T>
inline void
f(T &t, const char *s)
{
t = g(s);
}
というのも考えたが、これだと
X x;
f(x, s);
となってしまい
const X x = f(s);
のようにconstを使えないのでいやーんと
挫折したのよ…
0189デフォルトの名無しさん
NGNG{...}
const X x=f<X>(s);
0190189
NGNGs/inline/T/
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG書けます。
0195185
NGNGtemplate<typename T>
inline T
f(const char *s, const T &dummy)
{
return reinterpret_cast<T>(g(s));
}
const X x = f(s, x);
とかするのか?
0197185
NGNG10分ほど。
日付が変わったらもう一度かきこむよ。
わかったか、わからなかったか。
その時の返事に答えをきぼんぬ。
0198185
NGNG関数オブジェクト
T operator()(const char *s) const;
みたいなのをつかいますか?つかわないですか?
0199デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG0202186
NGNG{
const char *p_;
public:
Foo(const char *p):p_(p){}
template <class T>
operator T() const
{ return *(T *)(p_); }
};
Foo foo(const char *p)
{ return Foo(p); }
const int i=foo(p);
const float f=foo(p);
と出来ます。
って先に>201にかかれてますか?
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGそんなものだよ、人生は
0205185
NGNG頭をガツンとやられた感じだ
つまりは暗黙の型変換
(の際に仕掛けを発動させる)
をするということですか?
0206185
NGNGうまく働きますか?
0207デフォルトの名無しさん
NGNGそう、その変換が起きるまで処理を遅延させる
0208デフォルトの名無しさん
NGNGそれはコンパイラによるけど
template <class T>
operator &T() const;
処理内容によってはこのように参照を返すとか。
あまり複雑にやり過ぎると最適化かかりにくくなることはあるから、あまり使わないほうがいいのかもね
0209185
NGNG>あまり複雑にやり過ぎると最適化かかりにくくなることはあるから、あまり使わないほうがいいのかもね
素直に最初のままにつかっておくことにするよ
ところで、そもそもの質問で、
「関数テンプレートは戻り値をTを推測するための材料に使わない」
ということは、そうなのでしょうか?
0210sage
NGNGだれかフォローしてくれ
0211デフォルトの名無しさん
NGNGC++は戻り値を
int func() { ... };
// int n = func();
func();
捨てて文にすることもできる言語なので、戻り値の型は推測には使えない。
戻り値を受け取っている式の時だけ推論して、そうでない使い方の時はエラー、
という仕様も考えられなくはないが、>>210氏の書いてるように
構文上の自分の「子」以外の属性を使う…というのは言語定義が
かなり複雑になるので避けたのだろう。
0212デフォルトの名無しさん
NGNGclass B;
void f(A);
void f(B);
A g();
B g();
f(g());
0213sage
NGNGclass B : public A {};
class C : public A {};
void f(A);
void f(B);
void f(C);
A g();
B g();
C g();
f(g());
どれだゴルぁ
0214デフォルトの名無しさん
NGNGC++ では引数が同じで戻り値だけ異なる関数は多重定義できん。
どれだ以前にコンパイルエラーだ、ヴぉけ。
0215デフォルトの名無しさん
NGNG> B g();
> C g();
これが通るコンパイラがあるのかどうか知らないが・・・。
0216デフォルトの名無しさん
NGNG>>201のfを
void func(A);
void func(B);
の関数に突っ込んだら
func(f(s));
「どれだゴルぁ」ってことでないかい?
多分「あいまいだゴルァ!」いわれるのでは
0217デフォルトの名無しさん
NGNGgccではコンパイルできないのですが、
このコードは仕様上、認められているのでしょうか?
struct A
{
template<class T>
void Func(){}
};
template<class T>
void FuncA()
{
A a;
a.Func<T>();
}
0218デフォルトの名無しさん
NGNGtemplate<typename T>
struct A
{
void Func() { std::cout << typeid(T).name() << std::endl; }
};
template<typename T>
void FuncA()
{
A<T> a;
a.Func();
}
int main()
{
FuncA<int>();
}
0219デフォルトの名無しさん
NGNG情報なさすぎ
0220デフォルトの名無しさん
NGNGすいません。
mingw(gcc-3.2.1)では
void FuncA()
{
A a;
a.Func<int>();
}
のように普通の関数の中で 明示的にテンプレート引数を指定して
メンバ関数テンプレートを呼び出すことはできたのですが、
>>217のソースのようにテンプレート関数の中で呼び出すと
FuncAを実体化させない場合でも
a.Func<T>(); の部分で
parse error before `>' token
とエラーが出て、コンパイルできなかったんです。
ただ、VC.NETではFuncAを実体化させた場合でも
させない場合でも、コンパイルできたので、
ソースが間違っているのか、gccがその構文に対応していないのか
どちらなのかが知りたくて質問しました。
>>218
えっと....これはどう解釈したら?
VCでの出力は int
mingwでの出力は何故か i
になったのですが...。
0221デフォルトの名無しさん
NGNGi は int の i です。doubleは多分 d になると思います。
0222デフォルトの名無しさん
NGNGa.template Func<T>();
でどうよ?(自信無し)
0224デフォルトの名無しさん
NGNG第3版のC.13.6「限定子としてのtemplate」だね。
a.Func<T>(); とした時点でコンパイラにはFunc()がメンバテンプレートで
あることが分かっていないので、'<'が比較演算子だと見なされてエラー
になる。
0225デフォルトの名無しさん
NGNGa の型は T によらず決定しているから、Func が
テンプレートであることはコンパイラでわかるはずだが。
0226デフォルトの名無しさん
NGNGFAQ type_info::name()の結果は実装依存。
0227デフォルトの名無しさん
NGNG構文解析時には文法知識だけでやっていて、他のクラスがどうなってるか、
なんてことまでは考えていないのでは?
0228デフォルトの名無しさん
NGNGC++ はそれで済むような文法にはなってない。
例えば
std::string * x;
が"typename"無しでも(掛け算ではなく)変数宣言として扱われるのは、
それより前でstd::stringがクラス名として宣言されてることを
コンパイラが知っているからだし、あるいは上の例で
A a;
a.Func<std::string>();
なら"template"無しでも通るのは、(<が不等号なのではなく) a.Func が
メンバ関数テンプレートであることをコンパイラが知っている、からだ。
>>217、Comeau C++ なら通るからgccのバグだと思う。
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGttp://sourceforge.net/projects/tvmet/
0231デフォルトの名無しさん
NGNGboost::ublasの
違いを簡単に教えてくれー。
とりあえず、ライセンス読んだり、インストールとかめんどいんで
boost::ublasつかってますけど。
0232デフォルトの名無しさん
NGNGユニコードファイルを読み込みたいのですが、
wstringのgetlineを使っても、うまく改行を認識してくれないらしく、
2行目以降が読み込めません。
そのファイルの改行コードは、0x0d 0x00 0x0a 0x00 なんですが、
これを認識して正しくgetlineするにはどうしたらいいでしょうか。
0233あぼーん
NGNGhttp://muryou.gasuki.com/moe/hankaku10.html
http://muryou.gasuki.com/moe/hankaku09.html
http://muryou.gasuki.com/moe/hankaku08.html
http://muryou.gasuki.com/moe/hankaku07.html
http://muryou.gasuki.com/moe/hankaku06.html
http://muryou.gasuki.com/moe/hankaku05.html
http://muryou.gasuki.com/moe/hankaku04.html
http://muryou.gasuki.com/moe/hankaku03.html
http://muryou.gasuki.com/moe/hankaku02.html
http://muryou.gasuki.com/moe/hankaku01.html
0234かおりん祭り
NGNG〜oノハヽo〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ^▽^) < こんなのがございまーす♪
= ⊂ ) \_______
= (__/"(__) トテテテ...
0235デフォルトの名無しさん
NGNGSTLは何使ってんの
とりあえずVC++に付属のSTLはwchar_tの改行処理にバグがある
0236デフォルトの名無しさん
NGNGバグがあるって…パッチとか出ていないんですかねぇ。
0237デフォルトの名無しさん
NGNGSTLはソース状態で公開されてるんだから自分で修正すればいいじゃん。
0238ヽ(´ー`)ノ
NGNGtvmet の Usage を読んでたら、Introduction に
> "Tiny" means dimension less than about 10.
と書いてあるので、それ以上の次元を扱う場合には tvmet は使えないかも。
その分パフォーマンスとか記述の簡便さなんかが期待できるけど、
ublas と比べてる Benchmark は見付けれなかっし、俺にはどっちも
変態的なコードに見える。ライセンスは GPL なんで、利用は制限される。
boost::ublas は Fortran で書かれた BLAS というのが元になっていて、
相当の機能は実装しているようなので、これと同じように扱えると思う。
tvmet のウリが良く分かんないな…。機能も ublas の方が多いように思うけど
数学に疎いのでちょっと分からんです。俺なら boost::ublas かなぁ、
どうせ boost 入れるんだし…。
…こんなんで参考になる?(;´Д`)
0239デフォルトの名無しさん
NGNGthx
GPL->LPGL
かなりでっかくのってましたね。
でも、結局LPGLでもめんどいんで、やめました。
あと、boost::ublasにcross_product(外積のvector版)欲しかったんですがないようなんで(outer_prodだとマトリクスがかえる、、、)、
簡単な3D演算程度しか使用しないので、結局自分のうんこライブラリ使うことにしますた。
ていうか、次回からはクオータニン使おう。。。boostにはいってるし。
ちなみにわたしも数学疎いです。
0240ヽ(´ー`)ノ
NGNGサンクス。
0241Addicted to C++ ◆CPP8mJMMbA
NGNGclass(struct)はfstream::read,writeでファイルにデータメンバのみ
保存・ファイルから読み取りするような香具師なんですが。
0242sage
NGNG0243Q
NGNG#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class line_iterator
{
istream*in;
stringline;
boolis_valid;
voidread(){if(*in)
getline(*in, line);
is_valid = (*in) ? true : false;}
public:
typedef input_iterator_tagiterator_category;
typedef stringvalue_type;
typedef ptrdiff_tdiffrence_type;
typedef const string*pointer;
typedef const string&reference;
line_iterator() : in(&cin), is_valid(false){}
line_iterator(istream& s) : in(&s){read();}
reference operator*(){return line;}
pointer operator->(){return &line;}
line_iterator operator++(int){line_iterator tmp = *this;read();return tmp;}
bool operator==(const line_iterator& i) const{return (in == i.in && is_valid == i.is_valid) || (is_valid == false && i.is_valid == false);}
bool operator!=(const line_iterator& i) const{return !(*this == i);}
};
0244Q
NGNG{
line_iterator iter(cin);
line_iterator end_of_file;
vector<string> V(iter, end_of_file);
sort(V.begin(), V.end());
copy(V.begin(), V.end(), ostream_iterator<string>(cout, "\n"));
return 0;
}
これってVC7だと
d:\VS.NET\Vc7\include\vector(109): error C2665: 'std::_Iter_cat' : 12 の
オーバーロードは 1 番目の引数を 'line_iterator' から要求の型に変換できません。
って出るんですけど、何かおかしいところありますか?
0245sage
NGNG0246Addicted to C++ ◆CPP8mJMMbA
NGNGえーと、ランダムアクセスしたいのですけれども。
自作しないと無理ですかね。
0247sage
NGNGごめん、そういうのはみたことない。
0248デフォルトの名無しさん
NGNG意味わからん。
0250Q
NGNGGeneric本の最初の例なので意図は不明です。
0251デフォルトの名無しさん
NGNG放置されてるので非常に気になる。
どうアレなんでしょうか?
0252デフォルトの名無しさん
NGNG俺のつたない英語力では別に問題なさそうだったよ。
0253デフォルトの名無しさん
NGNGケースバイケース
場合によっては使えるし場合によっては使えない。
0254デフォルトの名無しさん
NGNG0255ヽ(´ー`)ノ
NGNG> expressed or implied. Any use is at your own risk.
…だよね。別に問題ないと思うけど。
元の発言者は「フリーウェアを使うのはダメだ」とかいう人なんじゃない?笑
0256251
NGNGそうかな?と思ってしまわないでもないです。
ところでstlport使用の際にドキュメントとかに使用してますみたいな旨は書かなくてよろしいんですかね?
ほんとソフトウェアの使用許諾書とかライセンスって長々とかいてあっていや。
stlportは1ページと短いけどさ。
0257デフォルトの名無しさん
NGNG等と言って信者を呼ぶのはやめておこう。
0258デフォルトの名無しさん
NGNG以下のようなコードでコンパイルエラーがでます。
#include <map>
class CTest {
std::map<int, CTest> m_map;
};
int main() {
return 0;
}
vc98\include\utility(26) : error C2079: 'second' が 未定義の class 'CTest' で使用されています。
vc98\include\xtree(28) : コンパイルされたクラスのテンプレートのインスタンス化 'std::pair<int const ,class CTest>' の参照を確認してください
vc98\include\map(46) : コンパイルされたクラスのテンプレートのインスタンス化 'std::_Tree<int,struct std::pair<int const ,class CTest>,
struct std::map<int,class CTest,struct std::less<int>,class std::allocator<class CTest> >::_Kfn,struct std::less<int>,
class std::allocator<class CTest> >' の参照を確認してください
My Documents\test\test.cpp(4) : コンパイルされたクラスのテンプレートのインスタンス化 'std::map<int,class CTest,struct std::less<int>,
class std::allocator<class CTest> >' の参照を確認してください
map<int, CTest*> とするとエラーは出なくなります。
自分自身のクラスを map に直接格納することはできないのですか?
0259デフォルトの名無しさん
NGNGコピーコンストラクタが定義されてないからじゃないの?
めんどかったら参照(&)入れとけ。
class CTest {
std::map<int, CTest&> m_map;
};
と、言ってみる。
0260258
NGNGコピーコンストラクタを明示的に定義しても同じエラーが出ます。
参照を入れるとまた別のコンパイルエラーが大量に出てきます。
参照をコンテナに格納することはできないと聞いているのですが。
0261デフォルトの名無しさん
NGNGコンテナをインスタンス化するためのテンプレートパラメータの型がまだ完成して無いから無理じゃない?
vectorは実装によってはポインタしか使わないから可能だね。
0262259
NGNGところで、クラスのインスタンスを直接コンテナにぶち込むのはどうかと思うが・・・。
普通はポインタいれない?
0263258
NGNGやはりそうですか。
>>262
ttp://www.geocities.com/nobukichi/Stl/lec008.html
以前コレとかを読んで考えたこともあるのですが,
やはりポインタを格納したほうが良いのでしょうか。
本を読んで勉強してみることにします。
あと,もう一つ質問なのですが,
>>258のように,わけの分からないエラーが出てきたときは,どのように対処したら良いのでしょうか。
あのエラーメッセージでは,どこがどうおかしいのかさっぱり分からないのですが。
0264デフォルトの名無しさん
NGNGふつうは 258 のエラーでわかる。
そうでなくてもエラーメッセージの出てるソース見ればたいていわかる。
vc98\include\utility の 26 行目を見てみてはどうか?
0266258
NGNGそうですか…精進します。
とりあえず vc98\include\utility とかいろいろ見て考えてみます。
皆様ありがとうございました。要はもっと勉強しろってことですね。
0267デフォルトの名無しさん
NGNGmapの実装に依るけど、もしmapのオブジェクト自体に
ルートノードが入っていて、その中にCTestが直接
入っていたら、m_map.root.data<CTest>というような
構造になって引っかかる、ということでは?
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG単純に大きさが確定してないオブジェクトを入れようとしてるからだろ。
0270デフォルトの名無しさん
NGNGVC6+STLport、WinXP で何の問題もなくコンパイルできたわけだが。
たぶんVCのSTLが腐ってる。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG> mapのオブジェクト自体にルートノードが入っていて
んなわけねぇだろ。
0273267
NGNGそうか?効率は置いておくとしても、
template <class X, class Y>
struct MapNode {
int flags;
X mid_index;
MapNode *left;
MapNode *right;
Y leaf_value; /* might be uninitialized */
};
なんて実装は考えられないか?
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNGいきなりキレる人多いよね。
多分一部の人だけだと思うけど。
やっぱり、
な け な し の プ ラ イ ド を 壊 さ れ る
のがいやなのかな(w
0277デフォルトの名無しさん
NGNG>反論されると いきなりキレる人多いよね。
そんなのどこのスレでも同じようなもんだろ
0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG現在は下のように一つずつ代入する方法で行っています。
char buf[10000];
vector<char> v;
v.resize(10000);
for (int i = 0; i < 10000; i++) v[i] = buf[i];
ただ、この方法では配列の数が増えたときにすごい重いので、
もっと簡潔な方法がありませんでしょうか。
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG> 配列の数が増えたときにすごい重いので、
ホントに計った?
0284デフォルトの名無しさん
NGNGi++ → ++i
にしてみる。
最適化されたらいっしょになるかな?
0285デフォルトの名無しさん
NGNGvector<char> v( &buf[0] , &buf[9999] );なのでは?
0286デフォルトの名無しさん
NGNGiteratorとcopyを使ってみては?
g++ 3.2だと-O3しても倍以上速いね。
0287デフォルトの名無しさん
NGNGSTLでは終端は末尾のひとつ後ろを指定します
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNGiはintだから変わらん
0290デフォルトの名無しさん
NGNGinline void arrcpy( std::vector<T>& target, T const (&source)[N] )
{
target.resize( N );
std::memcpy( &target[0], source, N );
}
>>281
どうよ?
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG×std::memcpy( &target[0], source, N );
○std::memcpy( &target[0], source, sizeof(T)*N );
ダロ?
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGそうそう。よくあるバグ。
スレとあんま関係ないけどさ、
このサイズ忘れるの防止できないかね。
今までこれ系のバグで開発止まった事何回もある・・。
0295デフォルトの名無しさん
NGNGこんなのハケーン致しますた!
0296デフォルトの名無しさん
NGNG0297295
NGNG0298デフォルトの名無しさん
NGNGmemcpyなんて使わないからいい。
target.assign( &source[0] , &source[N] );
0299ヽ(´ー`)ノ
NGNGすでに cppll に同じようなモノがあった(´・ω・`)ショボーン
せっかくなんで、URL 張っておきます。
http://www.tietew.jp/cppll/archive/7417
0300デフォルトの名無しさん
NGNGテンプレートでないところでstatic_assertって必要になる?
0301山崎渉
NGNG0302ヽ(´ー`)ノ
NGNGうーん、あんまないかも…遊びで作ってただけなんで。型のサイズチェックとかかなぁ。
gcc 限定で、const_cast とか…これぐらいしか思い付かん(;´Д`)Cスレの方が良かったかな。
#define CONST_CAST(__type, __p_instance) \
__extension__({ \
typeof(__p_instance) __instance = __p_instance; \
STATIC_ASSERT( \
__builtin_types_compatible_p(const __type, typeof(__instance)) \
); \
(__type)(__instance); \
})
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNGそれか、std::stringstreamを使って組む。
boost::歴史cal_castは内部的にはこれを使っている。
0306デフォルトの名無しさん
NGNGvc6でエラーでるからって轢死はないだろw
0307デフォルトの名無しさん
NGNG0308デフォルトの名無しさん
NGNGここのvectorもどきってどうなの?
えろい人、教えて!
0310デフォルトの名無しさん
NGNG漏れも見た。
・配列拡張にrealloc→operator=の定義によっては誤動作
・新しく取得したメモリにmemset(0)→vtableが死んでる
・例外安全でない
・constを正しく使っていない
いらね。っていうかダメダメ。
0311デフォルトの名無しさん
NGNGありがとう、エロい人達!
0312山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0313山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0314↑
NGNG0315デフォルトの名無しさん
NGNG0316山埼渉
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNG実行したところ、環境変数の領域が足りません、と言われました。
どうすれば領域を増やせるのでしょうか?
ちなみに↓のサイトを見て、同様に導入しようとしてます。
ttp://www.emaki.minidns.net/Programming/tools/STLport/
0320デフォルトの名無しさん
NGNGCMD.EXEを使う。
0321319
NGNGcommand.com /E:1024、という風にしてもできるようですね。
ありがとうございます。
0322デフォルトの名無しさん
NGNG↓
iterator insert(iterator pos, const value_type& val)
{
if (pos != end() && operator()(*pos, val) &&
(pos == end() - 1 ||
!operator()(val, pos[1]) &&
operator()(pos[1], val)))
{
return Base::insert(pos, val);
}
return insert(val).first;
}
0323デフォルトの名無しさん
NGNGcmath系がstd::hoge でエラーでて動かないし、
他にもエラーでまくり。
0324デフォルトの名無しさん
NGNGusing std::hoge;
_STLP_NO_なんちゃらでstd::をグローバルネームスペースに変換しちまえばいいんだが
そうすると、今度はiostreamのほうでひっかかるという罠。
0325STL初心者 ◆Saqno3S4wc
NGNGStlPortのStlを使ってコンパイルされていることを
確かめる方法はありませんか?
0326デフォルトの名無しさん
NGNG変かなあ
posが指す位置と入れる値によっっちゃ順序が狂うが...
これっていかんの?
0327デフォルトの名無しさん
NGNGコンパイルされたバイナリがSTLport使ってるかどうかか?
シンボル見ればなんとなくわかるんでないかい?
STLportをincludeしてるかどうかの判別をしたいなら、
#if defined(_STLPORT_VERSION) でいけるはず
0329デフォルトの名無しさん
NGNGttp://fara.cs.uni-potsdam.de/~kaufmann/?page=Startseite
お前らこんなのあるじゃないですか。外出?
0330sage
NGNGSTLportとboostで満腹
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGstlport とは食べ合わせよくないです。
でもシングルトンはつかわさせていただいてます。
つくるのもめんどいし。
0333デフォルトの名無しさん
NGNG前スレにも出てた。ずっと前から既出。
Loki は多少マニアックかもしれないが、使いやすいし
コードは STL の何十倍も読みやすい。
強力な Functor と Singleton は手放せないね。
Loki で一番難しいのは、強力な TypeList をどう使うかということだと思う。
0334デフォルトの名無しさん
NGNGboost じゃダメなの?
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNGboostにsingletonなんてあった?
0337デフォルトの名無しさん
NGNGttp://www.boost.org/libs/pool/doc/implementation/singleton.html
じゃぁLokiと比べるとショボすぎですかね・・・
0338デフォルトの名無しさん
NGNGSTLportをVS2003で使いたいんやけど
ヘッダーのどこを変えればいいの?
0339デフォルトの名無しさん
NGNGhttp://www.stlport.com/dcforum/DCForumID7/1408.html
↑見とけば?
0340デフォルトの名無しさん
NGNGこの前、factory使って簡単だなぁって思ったんで。
0341デフォルトの名無しさん
NGNGところで、Loki の人こと、A.Alex が
ttp://cuj.com/experts/2106/alexandr.htm とか
ttp://cuj.com/experts/2104/alexandr.htm で
例外も飛ばせる ASSERT マクロとか、
例外発生時に、発生位置と発生させた式を、診断メッセージと一緒に例外に埋め込む
ENFORCE マクロとかを紹介してるわけだけど、どう思う?
VC7.1 だと、__LINE__ がうまく展開されなくて、泣けてくるんだけど。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG基本的に同じで両方とも循環参照には対応していないという事でいいんでしょうか?
0344デフォルトの名無しさん
NGNGttp://www.kmonos.net/alang/boost/classes/weak_ptr.html
0345デフォルトの名無しさん
NGNGboost::lambdaで、構造体の内部変数にアクセスすることはできないでしょうか。
具体的には
map<int, int> m;
for_each(m.begin(), m.end(), cout << (_1.first));
みたいなことをやりたいのですが…。
当然、上のソースをコンパイルすると_1はplaceholderクラスなので、そんなメンバは存在しないとエラーが出ます。
俺はこうやってやっている、という例はありませんでしょうか?
(目的だけ考えればoperator <<なりを実装すればいいんですが、lambdaがとても便利なので他にも使える汎用的な書き方が欲しいと思いまして…)
0346デフォルトの名無しさん
NGNGこれどうですか?(未確認)
0347345
NGNGbind(&pair<const int, int>::first, _1)
constを忘れていたがために6時間を無駄にしました…アイタタ。
0348デフォルトの名無しさん
NGNGインスタンス化云々のエラーが出ます。gccでは出ません。
こういうもどかしさを解消する流儀はないでしょうか。
class type1;
class type2;
template <typename T> struct type_selector;
struct type_selector<tag1> { typedef type1 type; };
struct type_selector<tag2> { typedef type2 type; };
template <typename T>
class derived : public type_selector<T>::type { // (*1)
...
};
0349デフォルトの名無しさん
NGNGtemplate <typename T> struct type_selector{ typedef dummy type; }
としたら通ったぞ
0350348
NGNGむひょー!素晴らC。こんなテクが知りたかったんです。
どうもありがとう。
ポイントは dummy に型が未確定のものを指定することですね。
(組み込み型や既に確定している型を指定した場合は駄目でした。)
おいらは
template <typename T> struct type_selector{ typedef T type; }
ってしました。
0351デフォルトの名無しさん
NGNG//2つの文字列の比較
equal<"hoge", "hoge">::is_valid
//浮動小数点のtemplateパラメータ
log10<123.456>::value
//文字列を出力
md5<__FILE__ __LINE__ __TIME__>::value
みたいな事ができて、
あと、プリプロセッサマクロで乱数生成できたらうれしいのに。
0352デフォルトの名無しさん
NGNGtemplate<class T> inline bool equal(const T *a, const T *b) { return !strcmp(a, b); }
でいいんでないの?
コンパイル時に解決したいならlokiあたりをよく読んでみれ。
回りくどいとか見た目がわかりづらいというなら話が変わるが。
0353ヽ(´ー`)ノ
NGNGここは template スレですが?…と一応突っ込みを入れておくとして、
boost::preprocessor を使えば多分乱数作れるよ、やったことないけど。
あと tempalte の使い方がキモイ。ていうか意味分かんね。
0354デフォルトの名無しさん
NGNGtemplate関数作りましたが、長いので実装部を.cppファイルに移動したいのですが。
0355デフォルトの名無しさん
NGNG.cppファイルに移動した後、それを .h 内でインクルードしる。
0356デフォルトの名無しさん
NGNGそのやり方しかできないVCがキモクテいやだ。
でもVC楽だ・・・。
0357デフォルトの名無しさん
NGNG互換性に影響のない拡張ならそのうち標準に準拠するさ。
きっと。
0358Addicted to C++ ◆cpp/Sz/v02
NGNGexport
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGサンプルコードきぼんにゅ
0361デフォルトの名無しさん
NGNGとりあえず、gccでは通る。
けど、名前が思いつかない。
だれかいい名前つけてやって。
#include <cstddef>
template< typename T , std::size_t N >
char const ( &xxxxx( T (&)[N] ) )[N];
int const array[] = { 436,346,23,0,58,5678,32,0,4573 };
struct X
{
static std::size_t const num_elements = sizeof( xxxxx( array ) );
};
0362動画直リン
NGNG0363デフォルトの名無しさん
NGNG最後に sizeof 取る部分まで含めて、LENGTH とか lengthof とか
いうマクロにして使ってる人が多いと思う。
0364デフォルトの名無しさん
NGNGhttp://www.cuj.com/articles/1999/9907/9907i/9907i.htm?topic=articles
(↑ここに載ってる奴は構造体のパディングで死にそうだけど)
0365デフォルトの名無しさん
NGNGこっちなら大丈夫そうだ。
0366デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1046541730/l50
>>361
こんなスレもあるぞ。
0367デフォルトの名無しさん
NGNG前スレ
http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html の、
673-686 あたりに目を通すとヨイカモ。
0368デフォルトの名無しさん
NGNGtemplate プログラミングのキモは遅延コンパイルにあると思うのだがどうか。
0370山崎渉
NGNG0371
NGNG0372デフォルトの名無しさん
NGNG配列vectorを宣言するやり方がわかりません。
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGclass buf
{
char value[256][256];
public:
typedef char type[256];
operator type*(){ return value; }
};
std::vector< buf > a;
0378デフォルトの名無しさん
NGNGtemplate<class T>struct NonPointer
{ typedef T non_pointer; };
template<class T>struct NonPointer<T*>
{ typedef T non_pointer; };
これヲVC7で表現できないかなー?
0379デフォルトの名無しさん
NGNGそれってVC7.1じゃ駄目なの?
おれのはVC6だから当然無理だけど。
あと、VC6だとtemplate引数にint値が使えないのが痛い。
0380デフォルトの名無しさん
NGNGclass じゃなくて typename つかえばいいじゃんとかじゃなくて?
0381デフォルトの名無しさん
NGNG379じゃねーが、VC6だと↓が困ったことになる、って話かと。
#include<iostream>
template<int N> void f() {std::cout << N << std::endl;}
int main() {
f<1>(); f<2>(); f<3>();
}
0382デフォルトの名無しさん
NGNGintじゃなくても関数の明示的な特殊化は軒並みダメだよ
0383デフォルトの名無しさん
NGNGここよんでみ!
http://www.fides.dti.ne.jp/%7Eoka-t/cpplab-vc6-func-template-bug.html
ココヨンデミ♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂♂
0384382
NGNG特殊化じゃなくてインスタンス化だた
0385デフォルトの名無しさん
NGNGnamespace FN
{
namespace IN
{
class Null{};
template<
typename R,
typename T1 = Null,
typename T2 = Null,
typename T3 = Null
>struct fnimp{ typedef R (*pf)(T1,T2,T3); };
0386デフォルトの名無しさん
NGNGtemplate<
typename R,
typename T1,
typename T2
>struct fnimp<R,T1,T2,Null>
{ typedef R (*pf)(T1,T2); };
template<
typename R,
typename T1
>struct fnimp<R,T1,Null,Null>
{ typedef R (*pf)(T1); };
template<
typename R
>struct fnimp<R,Null,Null,Null>
{ typedef R (*pf)(); };
}
template<
typename R,
typename T1 = IN::Null,
typename T2 = IN::Null,
typename T3 = IN::Null
0387デフォルトの名無しさん
NGNG{
typedef typename IN::fnimp<R,T1,T2,T3>::pf pf;
function(pf p) : pt(p){}
R operator () (T1 t1,T2 t2,T3 t3){ return pt(t1,t2,t3); }
R operator () (T1 t1,T2 t2) { return pt(t1,t2); }
R operator () (T1 t1) { return pt(t1); }
R operator () () { return pt(); }
private:
pf pt;
};
}
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGバーカバーカ
0390デフォルトの名無しさん
NGNG半年ほど前に、エンディアンの変更をするテンプレート関数を作った。
namespace detail{
template< size_t Distance>
struct byte_swap {
static void do_swap( byte *x) {
std::swap( *x, *( x + Distance));
byte_swap< Distance - 2 >::do_swap( x + 1);
}
};
template<>
struct byte_swap< 1 > {
static void do_swap( byte *x) {
std::swap( *x, *( x + 1));
}
};
template<>
struct byte_swap< 0 > {
static void do_swap( byte *x) {}
};
}
template< typename T >
inline void swap_endian( T &x){
detail::byte_swap< sizeof( T ) - 1 >::do_swap( reinterpret_cast< byte *>( &x));
}
こんな感じ。で、エンディアンの異なるファイルを構造体で一括して読み込んでから
各メンバをスワップさせたいんですが、いちいち各メンバにswap_endian( a.first);
のように書くのがアホくさいんです。構造体のメンバにforeach見たいにアクセスする
方法ってないでしょうか?実行時はできないだろうけど、コンパイル時にやれないことも
ないんじゃないかと思うんだけど、まったくわかんない。
0391ぷらぷらー
NGNGtemplate <class A,class B=Nil> struct TL{ typedef A head; typedef B tail; };
template <class TL> struct Tuple : public Tuple<typename TL::tail>{
typename TL::head a;
template <class Fun> void each(Fun f){
f(a);
Tuple<typename TL::tail>::each(f);
}
};
template <> struct Tuple<Nil>{
template <class Fun> void each(Fun f){}
};
struct Printer{
template <class T> void operator()(T val){
std::cout<<typeid(T).name()<<" "<<val<<std::endl;
}
};
Tuple<TL<int,TL<short,TL<char> > > > tuple;
tuple.each(Printer());
タプルの要素を順に書き出します。
構造体をタプルで作れば同じように、メンバに順にアクセスできます。
普通の構造体のメンバ変数のforeachは不可能と思われます。
0393デフォルトの名無しさん
NGNGタプルにはできないんでつか
0394デフォルトの名無しさん
NGNGTuple個人的には気に入りましたがこれでは無理かと。
構造体のサイズって一定じゃない(アライメント調整すれば別だけど)
struct temp{char , int };
これで話せば、Tupleでトレースするには、
sizeofで場所を突き止めるんだよね。(なまえ使えないから)
charの場所(&temp)のつぎはint。場所は(&temp+1)ここじゃなから
swapなんてとんでもない。間違っていたらごめん。
0396デフォルトの名無しさん
NGNGどこかに置いてないか知っている人いますか?
自分で作ろうと思ったら意外と難しいな・・・・
0397デフォルトの名無しさん
NGNGhttp://mypage.odn.ne.jp/home/dongrico
0398デフォルトの名無しさん
NGNG俺もホスィ。
もし見つけたらこのスレに貼ってくれ、頼む。
GC無しで実現出来ればかなり使えるジャン。
0399デフォルトの名無しさん
NGNG循環参照問題を解決ってことは参照カウントではない手法なんだろうけど、
GCを行うメモリ管理方式?
それとも参照カウントと弱参照の組み合わせ(boostのshared_ptrとweak_ptr)?
0400デフォルトの名無しさん
NGNGhttp://angelers.free-city.net/index.html
0401デフォルトの名無しさん
NGNGhttp://groups.yahoo.com/group/boost/files/ に幾つか。
0402デフォルトの名無しさん
NGNGlokiのスマートポインタって解決してなかったけ?
ところで、vc6,stlportで
std::string hoge("hoge");
std::string moe( hoge.begin(), hoge.end );
を、/MD /MDd のオプションでビルドすると、
error LNK2001: 外部シンボル ""__declspec(dllimport) public: __thiscall _STL::basic_string< ・・・略
は未解決です。test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
stlportのライブラリのビルドに失敗してる?
それ以外のオプションならきちんとビルドできるのにな・・・。
0403402
NGNG消したらとおった・・・。
デバッグモードoffにしろということか・・・。
0404デフォルトの名無しさん
NGNGライブラリをビルドしたときには_STLP_DEBUGが付いてなかったんだろう。
0405デフォルトの名無しさん
NGNGこれらに要素を追加して、その内容をファイルにセーブする場合、
begin()〜end()の順でセーブして、読み込むときにinsert()で追加していくと
読み込んだ後のsetとかの検索速度は悪くなりますか?
悪くなる場合、検索速度の改善方法は一般的にはどのような方法がありますか?
0406デフォルトの名無しさん
NGNGよろしいのでしょうか?
struct Person{
int Age;
string Name;
};
class Community : public std::list<Person*> {
...
};
0407402
NGNGで stlportビルドしてみたけど、ダメポですた。凄い人、教えてー。
>>406
stlのコンテナは継承してはいけないはず。
効率を上げるため、仮想デストラクタがないから(確かめたことないけど)。
0408デフォルトの名無しさん
NGNGただの二分木はあまりつかわない。
赤黒木あたりで実装されることが多いので、効率は悪くならない。
0409デフォルトの名無しさん
NGNG二分木といってもAVL木か赤黒木なんかで挿入と同時に平衡処理をしてるはずなので大丈夫かと
0411デフォルトの名無しさん
NGNGCommunity* commp = new Community;
こういう事しなければよろしいかと
0412ぷらぷらー
NGNGそれは別にいいんじゃないですか?
いけないのは↓こういうことをしたときですよね。
std::list<Person*> *p=new Community;
delete p;
>>406
is-aの関係よりhas-a関係にしたほうがいいと言われると思います。
0413406
NGNGhas-aの関係にします。
0414デフォルトの名無しさん
NGNG>>402
どうもです、とりあえず一つあたってみたのですがソースが読めない・・・
どういうアイディアを使ってどういう構造になっているのでしょうね、難しい。
この問題は簡単に解決とは絶対にできなさそうですね、週末また頭ひねって考えよう
ところで、巷で良いという噂の Modern C++ Design には、このアルゴリズムが載っていないか知りませんか?
本屋に無いので注文せざるを得ないのですが、注文して載ってなかったらとても悲しいので。
0415デフォルトの名無しさん
NGNGすみません。おれが書き込みミスってた。(ミスりすぎ)
std::listはvirtualなデストラクタ持ってないってことですね。
補足してちょっとミエはってみたり。
0416デフォルトの名無しさん
NGNG> どうもです、とりあえず一つあたってみたのですがソースが読めない・・・
覚えてないが、どれも基本的に Mark and Sweep だったような。
あと、Loki / Modern C++ Design には循環参照があっても使えるような
スマートポインタは含まれてないぞ。あのフレームワークを使って
実現することは出来るだろうが…。
0417デフォルトの名無しさん
NGNGシンボルの未解決というのは、ライブラリをリンクしてないからでは?
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNGVC++のデフォのSTLはどうやって解決してんだ?
0421デフォルトの名無しさん
NGNGtemplate <class T> class A{
T data;
}
A<int> x;
A<CFile> y;
としたとき、xやyからテンプレート型名を取得する事はできないでしょうか?
つまり、ここでいうintやCFileのことです。
x::Tとできればいいのですが、できませんでした。(VC++.NETにて)
(もちろん、変数名があればテンプレートの型名は一意に決まるとは思うけど、マクロに使いたいから。型を変更するとき何カ所も変更する仕様にしたくないし、型を気にしなくていいマクロにしたいのです。)
0422デフォルトの名無しさん
NGNGそれは今のテンプレート仕様の欠点。
だからtypeofの導入が強く求められてる。
テンプレート関数の引数に渡せば型は得られるがその関数内部でしか使えないので特定用途に限られる。
template< typename T > void func( T a )
{
// func に x を渡せば、T は A< T >、y を渡せば A<CFile>
}
0423デフォルトの名無しさん
NGNGどんなマクロを目論んでるんだろ。
templateだけじゃ実現できないようなことなの?
0424421
NGNGそうですか・・・。やはり、マクロに型名を毎回埋め込む事にします。
>>423
#define PROPERTY(classname, propget, proplet) \
classname.PropertyGetHandler = (classname::ktype (*)(void*))(propget);\
classname.PropertyLetHandler = (classname::ktype (*)(void*, classname::ktype))(proplet);\
classname.Parent = this
としたかったんです。
実装は
ktype (*PropertyGetHandler)(void *Parent);
operator ktype(){
KTASSERT_C(PropertyGetHandler, "書き込み専用プロパティを読み込もうとしました。");
return PropertyGetHandler(Parent);
}
てな感じで(Getのみ書いてます)。クラスのコンストラクタでPROPERTY(Width, GetWidth, SetWidth)と書いておけば、
n = Width;なら、現在の幅を取得、
Width = n;なら、現在の幅を設定、
とできるので、分かりやすくていいかな、と。
単にメンバとして実装しないのは、カプセル化のためですが、カプセル化されてないように見えてカプセル化されてるってのがおもしろい・・・って思っただけで。まぁ、GetWidth()・SetWidth()って普通にすればいいんだけどね・・・。
まぁ、マクロに型名埋め込む事にしますわ。
0425名無しさん@Linuxザウルス
NGNGtemplateだけで実現できそうな気がするな
まあマクロなしだとthisを渡すのは消せないが。
0426421
NGNGでも、それだと、
CProp<int>Left;
CProp<int>Right;
CProp<int>Top;
が、
CProp<CWin, int>Left;
CProp<CWin, int>Right;
CProp<CWin, int>Top;
に成っちゃう・・・(CWinはこのプロパティを持っているクラスの名称)けどこれは仕方ないかな。
0427デフォルトの名無しさん
NGNGこんなの書いてみた
template<typename T> class Setter {
T& val_;
public:
Setter(T& v):val_(v){}
void operator()(T v) {val_=v;}
};
template<typename T> class ReadOnlySetter {
public:
ReadOnlySetter(){}
ReadOnlySetter(T&){}
void operator()(T v) {std::cout << "read only property assignment" << s
td::endl;}
};
template<typename T> class Getter {
const T& val_;
public:
Getter(const T& v):val_(v){}
T operator()() {return val_;}
};
template<typename T, typename S = Setter<T>, typename G = Getter<T> > class Prop
{
S set_;
G get_;
public:
Prop(S s, G g) :set_(s) ,get_(g) {}
Prop(T& v) :set_(v) ,get_(v) {}
const T& operator =( const T& newval ) { set_(newval); return newval; }
operator T() { return get_(); }
};
0428427
NGNGclass Frame {
int width_;
int readonly1_;
class GetReadOnly2 {
const int& s_;
public:
GetReadOnly2(int& s):s_(s){}
int operator()(){ return s_*2; }
};
public:
Prop<int> Width;
Prop<int, ReadOnlySetter<int> > ReadOnly1;
Prop<int, ReadOnlySetter<int>, GetReadOnly2> ReadOnly2;
Frame()
:width_(0)
,readonly1_(1)
,Width(width_)
,ReadOnly1(readonly1_)
//,ReadOnly2(ReadOnlySetter<int>(), GetReadOnly2(readonly1_))
,ReadOnly2(readonly1_)
{}
};
0429デフォルトの名無しさん
NGNG0430427
NGNGFrame f;としたときに
f.Width でf.width_を読み書き
f.ReadOnly1 で代入は阻止、読むと readonly1_が読める
f.ReadOnly2 も代入は阻止、読むと readonly1_ * 2 が得られる
てなかんじ
初歩的だけど(^^;
getterとsetterにそれぞれ関数オブジェクトを渡すことでいろいろできると。
0431デフォルトの名無しさん
NGNGtemplate< typename ValueType >
class property
{
public:
typedef ValueType value_type;
typedef boost::function< value_type () > getter_type;
typedef boost::function< void ( value_type const& ) > setter_type;
explicit property( getter_type const& g , setter_type const& s ) : m_getter( g ) , m_setter( s ) {}
explicit property( getter_type const& g ) : m_getter( g ) {}
operator value_type () const { return m_getter(); }
property& operator = ( value_type const& rhs ){ m_setter( rhs ); return *this; }
private:
getter_type const m_getter;
setter_type const m_setter;
};
0432デフォルトの名無しさん
NGNG#include "boost/bind.hpp"
class X
{
int m_x;
int get(){ std::cout << "get" << std::endl; return m_x; }
void set( int i ){ std::cout << "set " << i << std::endl; m_x = i; }
public:
property< int > p;
X() : p( boost::bind( &X::get , this ) , boost::bind( &X::set , this , _1 ) ) {}
};
int main()
{
X x;
x.p = 1;
std::cout << x.p << std::endl;
x.p = 100;
std::cout << x.p << std::endl;
return 0;
}
// ワーイ、boostサイコー
0433デフォルトの名無しさん
NGNGstruct X {
...
int p;
...
};
int main()
{
X x;
x.p = 1;
std::cout << x.p << std::endl;
x.p = 100;
std::cout << x.p << std::endl;
return 0;
}
0434デフォルトの名無しさん
NGNG(w
0435デフォルトの名無しさん
NGNG最高にイかしてるけど、普通にXメンバーfunc、callした方が
イイ罠。
0436デフォルトの名無しさん
NGNGすべてのメンバ変数(属性)はアクセサを経由して使うって決めれば
統一感もあるし凝った細工も要らないね。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG容量も無効にしてくれるみたいなんですが、これは規格に合っている動作なんでしょうか?
swap技法みたいなのもありますし、erase(begin(), end())と同じだと思っていたんですけど……
解放されないのをあてにして書いたコードは書き換え無いと。
ちなみにVC6やgcc3はerase(begin(), end())を呼んでいるだけみたいです。
0440デフォルトの名無しさん
NGNGclear()したときに、領域をどのように開放するかは実装依存で、
swap技法を使えばどの実装でも解放されることになってる。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGEffective C++からの一連の本嫁〜
とにかく
v.swap( std::vector<int>() );
こんな調子で作っただけの一時オブジェクトと交換する手法
0443439
NGNGということは、出来るだけ解放させたくない(これまでに確保した領域を
再利用したい)場合はclear()ではなくerase(begin(), end())を呼んだ方が
いいってことですね。
>>441
EffectiveSTL 第17項 余分な容量を取り除くには「swap技法」を使おう
を参照のこと。
0444440
NGNG規格を見たら clear()は erase(begin(), end())と同じと、
書いてありました。ちゃんと見ずに言ってスマソ。
結局、VCがそういう仕様である限り erase(begin(), end())
としたほうが良いのは、かわりないけど。
0445デフォルトの名無しさん
NGNGVC7.1のvectorは:
>void clear()
>{// erase all elements
>erase(begin(), end());
>}
になってますね。
0446デフォルトの名無しさん
NGNGいつごろになりそうなんですか?
0447デフォルトの名無しさん
NGNG気になったから調べてきたぜ。
結論から先に言うと、clear()でcapacity()が変わってしまうのは
規格の 23.2.4.2 -5- に反する。
ここで言っている再確保に関する保証がリセットされる機会は規格上に記述されていない。
そうなるとswap技法はどうなるのかと言うと、
swapによってcapacity()も入れ替わるという記述が抜けているということで、
現在の標準の欠陥として委員会に承認されている。
ttp://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#341
23.2.4.2 -5- に関しては、こんなのもあった。
ttp://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#329
↓同じSTL実装と思われるXBOXでの話から巻き起こる議論
ttp://www.mainframeforum.com/t50764.html
0448447
NGNGごめん、↑は↓に置き換えて読んで。
> clear()でcapacity()が小さくなってしまうのは
0449デフォルトの名無しさん
NGNGえ、マジで?
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\vector
は
void clear()
{// erase all
_Tidy();
}
になってるんだけど。
vector<int> a;
a.reserve(100);
cout << a.capacity() << endl;
a.clear();
cout << a.capacity() << endl;
も
100
0
になるんだけど。
直されてるバージョンがどこかにあるのかな。
0450デフォルトの名無しさん
NGNGよくみたら引用した行は vector<bool> でした。
通常版のvectorは確かに_Tidy()呼んでましたね。申し訳ない
0452デフォルトの名無しさん
NGNGだれもツッコミないから俺から一言。
そのような一時オブジェはswapには渡せません。
0453デフォルトの名無しさん
NGNG左右逆でしたね。正しくは
std::vector<int>().swap(v);
しかし間違っているというだけで正しいものを指摘しないのはなんだか。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGプログラミング言語第3版【日本語版】で13章4.1で使ってんだけど、これ間違いだよね。
規格のhttp://www.kuzbass.ru/docs/isocpp/template.html
14.1.9には関数はあかんって書いてるけど。
たんに本での俺の解釈が間違いかな?それとも訳?
0456デフォルトの名無しさん
NGNGもちろんだめ。
0457デフォルトの名無しさん
NGNGやっぱダメだよね。
特別なコンパイラでもあるのかと、思っちゃいましたよ。
0458デフォルトの名無しさん
NGNG0459455
NGNGごめんごめん。質問わるかった。
デフォルトテンプレートに関数ではなく。
int test(){}
template<int (*pf)() = test> これではなく。
struct fun{};
関数のテンプレートにデフォルトを持たすことができないよね?といってるんですよ。
template<typename T,class C = Cmp<T> > ←これ。
int compare(const String<T>& s1,const String<T>& s2){}
こんなのない?
0460デフォルトの名無しさん
NGNG関数テンプレートはデフォルト引数を設定できないよん。
デフォルト引数を設定できるのはクラステンプレート。
関数テンプレートはその代わり使用される時のコンテキスト(引数)で
判断が可能な場合は引数の省略が可能。
(逆にクラステンプレートにこの機能はない。)
0461455
NGNGわざわざ詳しい説明に感謝。
俺は本のせいで数時間(数日?)、惑われてしまった。
もしかしたら。と、期待を胸に抱いて。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGDispatchオブジェクトのスマートポインタに
(pDisp->*L"Hoge")();
とか
0464デフォルトの名無しさん
NGNGしかし忙しくてあまりいじる暇がない……
0465デフォルトの名無しさん
NGNGこんなんどうやるの?
0466デフォルトの名無しさん
NGNG禿同
0467デフォルトの名無しさん
NGNGfunction<void()> operator->*( const wchar_t* name ) { ... }
とかじゃないの?
つーか確かに >>463 の使い方は萌え萌えだ。
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGもえ〜〜〜〜〜。LV UP!
もえもえもえもえもえもえもえもえもえっ。
もえーーーーーーーー。ごっちゃんですぅ。
0470デフォルトの名無しさん
NGNG誰か説明してたもれ…
0471デフォルトの名無しさん
NGNGhttp://homepage3.nifty.com/coco-nut/
0472デフォルトの名無しさん
NGNGそれぞれに違う引数を渡したい場合はどうするんだろう?
0473463
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=75
俺の今の実装。
CComVariant name = (pDisp->*"get_Name")();
(pDisp->*"put_Name")( name );
実は引数を渡したことがないからバグってるかも。
->*の優先順位が低いのが悲しいな・・・
0474デフォルトの名無しさん
NGNG誰か説明してちょ♪
0475デフォルトの名無しさん
NGNG標準
0476デフォルトの名無しさん
NGNGはじめての恋。そして、別れ。
のような甘く、ちょっぴり切ない気持ち。
0477デフォルトの名無しさん
NGNG標準なので移植性が高く、使い方を間違わなければ効率もいい。
ものによってはCの標準ライブラリよりも効率がいいよ。
あと、汎用的なわりには結構使いやすいんではないかな。
0478デフォルトの名無しさん
NGNGC++使いなら誰でも書ける程度の代物が多いけれど、
* 標準なのでどこでも使えるし、
* (まともな実装を選べば)枯れてるからバグも少ないし、
* <vector>とか<map>とかalgorithm>とか、簡単ではあるけれどよく使うものなので
塵も積もれば山となるってことで最終的には結構手間を省けるし、
* C++使いなら誰でも(きっと)知ってるはずなので、
関数やクラスの名前だけ見ても、ぱっと見何をしてるのか推測しやすく、
ソースコードの可読性が上がる。
boostもそれに準じる。Lokiはまだちょっと知名度低そうだけど。
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNGまあ標準に準拠できていない処理系は別問題(もはやC++として議論できない)
ってことで
0481デフォルトの名無しさん
NGNGライブラリが無いのがつらい。
0482デフォルトの名無しさん
NGNGそんならSTLPortとか持ってくればいいんじゃない?
(VCで比較するなら2世代前のVC6ではなくVC7.1で比較して欲しい(笑))
0483デフォルトの名無しさん
NGNGSTLportからは一部持ってきてつかってるよ。というか、参考にして適当なのでっちあげた。
SHでの開発にKPITのGCCが使えないか探り中。
0484デフォルトの名無しさん
NGNG今お試しでVC7.1いんすこしたとこ。
0485デフォルトの名無しさん
NGNGGCC3.2で使おうとすると、
template < typename T >
struct A
{ typedef T value_type; };
template < typename T >
struct B : public A< T >
{ void f( value_type t ){} };
以下のようなWarningがでました。
warning: `typename B<T>::value_type' is implicitly a typename
どうもB<T>の公開基底クラスであるA<T>でのtypedefが見えていないようです。
これはC++の仕様?それともGCCのバグ?
なにかうまい方法はないっすかね?
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGA<T>::value_type or B<T>::value_type ?
0488デフォルトの名無しさん
NGNGnisurebaiinnjyanaikana?
0489485
NGNGすみません。よくわかりません。
B<T>であらたにtypedefは追加していないのですが、、、
>>488
それでよさそうな気もしますが、
こんどはその行で parse error がでます。
わけわからん、、
0490デフォルトの名無しさん
NGNGtemplate<typename T>
struct L : public A<T>
{
typedef typename A<T>::value_type value_type;
void f(value_type t){}
};
0491デフォルトの名無しさん
NGNGtemplate<typename T>
struct L : public A<T>
{
void f(typename L::value_type t){}
};
0492デフォルトの名無しさん
NGNGAが特殊化されていたら A<T>::value_type が存在しない/型名でない可能性
があるのです。
0493485
NGNGありがとうございます。
しかしですね、私としては>>490のようなことをせずにすむように
struct Aを定義しているつもりなんですよ。
typedefを必要とするBのようなクラスがたくさんあるときに、
Aから継承するだけで、typedefを書かなくても済むように。
(つまりAをstd::iteratorのように使いたい。)
また、>>491では>>485と同じWarningがでます。
Warningの内容からすれば、>>488の対処がマッチするような気がするのですが、
>>491ではなぜか parse error が出てしまうのです。
0495485
NGNG#include <iterator>
#include <iostream>
using namespace std;
template< typename T >
class B : public iterator< random_access_iterator_tag, T >
{
public:
void f( value_type a ){}
};
また、
void f( value_type a ){} を
void f( typename value_type a ){}
に変えるとparse errorが出る、というのも>>485のコードと同じです。
0497492
NGNGこの場合にはtypename の次には少なくとも一つネームスペースとしてのクラス名
が必要なのです、と文法できまっています。よって
typename A<T>::value_type t または
typename B::value_type
とかけばよいです(>>491は通るよね?)。
自分も同じ事でハァって思って結局警告を無視するかいちいち継承先で
typedef typename ....
って書くしかないという結論になりました。後者だとstd::iteratorの存在意義
があまりない罠。
0498デフォルトの名無しさん
NGNG0499485
NGNG> この場合にはtypename の次には少なくとも一つネームスペースとしてのクラス名
> が必要なのです、と文法できまっています。よって
> typename A<T>::value_type t または
> typename B::value_type
> とかけばよいです(>>491は通るよね?)。
なるほど、勉強になりますた。>>491は通ります。
void f( typename B::value_type a ){}
でいくことにします。
> 後者だとstd::iteratorの存在意義があまりない罠。
まったくですね。なんか納得がいかない。むかつく。
0501492
NGNGこぶしを振り下ろすとよいです。安物のキーボードのほうが殴ったときに
たわんだ感じがしてより自己効力感を得られるし、万が一壊したときの
損害も少なくてすむので、ベターです。
0502485
NGNGhttp://www2.justnet.ne.jp/~tyche/bcbbugs/reports/compiler010.html
なんかコンパイラのバージョンがあがって直ったとか。
しかし、このスレでの結論としては、
GCC3.2もBCC4.0も標準として正しく
BCC5.02JやVC++( >>498 )がおかしい、
ということですか?
0503デフォルトの名無しさん
NGNGいや>>492の意見を取り入れるとBCCの方はわかりませんが
VC++の方は部分特殊化がないからでは。
0504485
NGNGノートパソコンなので、無理です。
>>492
> >>485
> Aが特殊化されていたら A<T>::value_type が存在しない/型名でない可能性
> があるのです。
コンパイラにはそういうときだけ
(A<T>が特殊化されてvalue_typeが存在しない typename T に対して
B<T>が実体化されたときだけ)
エラーを出してほしいと思うのですが、それは標準ではない、
ということなのでしょうか。
0505492
NGNGfootypeでもfoo<T>::footypeでも特殊化を考慮するとこれが型名であるとは
(Tが未決定の時点では)決定できないのでtypenameつける以外は違反
になってしまう?まぁ実装では>>504の望むようになっているけど。
標準じゃないから認めんとか言い出したら、禿ムカツクってことで泣き寝入りを。
>>503
VC6でも↓は通らないから、このケースでのvcとgccの違いは警告を出すか
どうかだけなんではないかな。bccは入れてないからわからない。
template<typename T>
struct A
{ typedef T value_type; };
template<>
struct A<char> /* 特殊化(value_type未定義)*/
{};
template<typename T>
struct L: public A<T>
{ void f(A<T>::value_type t){} };
int main() {
L<int> li;
L<char> lc;
li.f(0);
lc.f('0');
}
0506503
NGNG>このケースでのvcとgccの違いは警告を出すかどうかだけなんではないかな
確かにそうかもね。その点では案外VC++が優秀なのかもね。
g++ -wじゃ全部の警告消えちゃうしね。
それから、この特殊化の例が通ると怖いね。
0507デフォルトの名無しさん
NGNGバージョン明記してくれ〜
0508デフォルトの名無しさん
NGNGUSBキーボードかえ
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNGキータッチが別れてるやつって使いやすいの?
買おうかどうか迷ってるんだよ。
0511デフォルトの名無しさん
NGNG0512名無しさん@Emacs
NGNG0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0515デフォルトの名無しさん
NGNGスマソ。
0516デフォルトの名無しさん
NGNG向こうのスレのループを持ち込むな
もまえら、釣られてはいけません
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG質問カモ〜ン
0519デフォルトの名無しさん
NGNGageルナ。
0520デフォルトの名無しさん
NGNGAが特殊化されていたら A<T>::value_type が存在しないというのは
具体的にはどういうときに起こるのでしょうか?
0521デフォルトの名無しさん
NGNG0522520
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGそうなら、小さくなった場合vector再作成しなきゃならないですか?
ってそんな処理書くの手間なような。
0525デフォルトの名無しさん
NGNG名前がわからないので、ググることもできないんで、、、
ご存知の方、教えてください。
class A;
class B {
int c;
A *m_a;
};
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG質問の意味がちょっと・・・。
0528527
NGNG0529デフォルトの名無しさん
NGNG名前も何もAて言うクラスじゃん。
しかも、それは宣言のみだからどこかに定義がなけりゃ使えん。
0530デフォルトの名無しさん
NGNGぐ〜ぐるではヒットしなかったが。
0531デフォルトの名無しさん
NGNGクラスAの宣言文をなんというかが知りたいんです。
以前、「抽象クラス」っていう、って文を見たことがあるんですが、
ぜんぜん自信がありません(し、ググってもそれらしいのは見つからない)
でも、Javaの抽象クラスとは意味が違って紛らわしいなぁと思った
記憶はあるんですが。
0532デフォルトの名無しさん
NGNG英語では、なんていうんでしょうか?
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGありがとうございます。
前方宣言でいいようです。ぐぐったらヒットしまくりました。
ありがとうございました。
0535デフォルトの名無しさん
NGNG後方宣言で通じる奴はいないだろうけど。
0536デフォルトの名無しさん
NGNG藻前カコイイ!
0538デフォルトの名無しさん
NGNG正規表現だと"後方参照"だから、宣言があるのは前方、
参照があるのは後方、でいいのではないかなあ。
0539デフォルトの名無しさん
NGNG先読み表明、後読み表明はどうする
0540デフォルトの名無しさん
NGNG現在位置より先を読むんだから普通に"先読み"表明で何か問題あるか?
後読み表明って聞いたこと無いからわからんが。
0541デフォルトの名無しさん
NGNG後読み表明ってひそかにマイナーだったんだな
「後読み」や「後読みアサーション」でググってくれるとヒットする。
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG「::」で修飾されないシンボルの検索では,
テンプレート引数に依存する親クラスは考慮されない。
だから、
template <class T>
struct Iter : public iterator<input_iterator_tag, T> {
void foo(value_type) {}
};
はダメだが、
struct Iter2 : public iterator<std::input_iterator_tag, int> {
void foo(value_type) {}
};
は問題ない。
以前ハマって仕様書調べたことがある。
g++ 3.3 だと御丁寧にも
implicit typename is deprecated,
please see the documentation for details
と言われる。
>>524
禿しくガイシュツ杉。
swap技法で検索するがよろし。
0544デフォルトの名無しさん
NGNG> 「::」で修飾されないシンボルの検索では,
> テンプレート引数に依存する親クラスは考慮されない。
...中略...
> 以前ハマって仕様書調べたことがある。
それはつまり
>>502ということですか?
0545デフォルトの名無しさん
NGNG0546山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0547低LVで申し訳無い
NGNGどちらからも相手を特定したいのですが
map<A, B> m_mapA2B;
map<B, A> m_mapB2A;
の二つを持たせてfindするしかないですか?
0548山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0549デフォルトの名無しさん
NGNG標準の範囲ではそんな感じの手しか無いと思う。
そーゆー用途のコンテナを作ってる人が世の中には
それなりにいるので、それを利用するのが手かと。
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=bidirectional+map
0550547
NGNG0551飲斡磯稲飲斡
NGNG0552ほしゅ
NGNG0553デフォルトの名無しさん
NGNGを持たせる様に巧く書けません。
下のコードですけど、
gcc version3.2.2では通りますが、
gcc version2.9.6では C<T>::C()のiteratorについて、
C<T>がmap templateを持ってないと怒られます。
typenameを消すとgcc version2.9.6で通りますが、
今度はversion3.2.2で通りません。
何がおかしいんでしょうか?
--------------------------------
template<class T>
class C {
public:
typedef map<T,T> TCont;
C();
};
template<class T> C<T>::C() {
typename C<T>::TCont::iterator iter;
}
---------------------------------
0554デフォルトの名無しさん
NGNGたんによけいです。gcc version 2.95.3-10で確認。
template<class T> C<T>::C() {
typename TCont::iterator iter;
}
0555デフォルトの名無しさん
NGNGGCC-2.9XはC++のテンプレートに関して期待したらダメだと思うけど。
テンプレート使う以上はGCC3以上必須。
0556553
NGNGホンとですね...逝ってきます。
>>555
> GCC-2.9XはC++のテンプレートに関して期待したらダメだと思うけど。
うちの環境RedHat7.3がベースなので、
ほとんどがgcc-2.9.xです
(つд`)∴°
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNGstl程度止まりの人達には必要充分。
0559デフォルトの名無しさん
NGNGStlOnlyでも特殊化は使うと思うけど。
0560デフォルトの名無しさん
NGNG質問したらageようよ
0562デフォルトの名無しさん
NGNGなんの2.9.x? gccかな?
0563_
NGNG0564_
NGNG0566_
NGNG0568_
NGNG0570_
NGNG0572_
NGNG0573デフォルトの名無しさん
NGNG0575_
NGNG0577_
NGNG0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNGコード晒さないとわかんねぇよ。
0580578(1)
NGNG#include<boost/timer.hpp>
#include<boost/smart_ptr.hpp>
#include<sstream>
#include<vector>
#include<string>
#include<iostream>
#define MAX_LOOP (100000)
#define B_PRE { boost::timer tmr;
#define B_START(i) for(int i=0;i<MAX_LOOP;i++){
#define B_END } std::cout << tmr.elapsed() << std::endl; }
#define B_FINALLY_BEGIN }
#define B_TIMER std::cout << tmr.elapsed() << std::endl;
#define B_FINALLY_END }
wchar_t* stringconcat_i(const wchar_t* s1,int ii2){
const int i1 = wcslen(s1);
const int i2 = 6*sizeof(int);
const int i = i1+i2+1;
if( i1 > i || i2 > i || i1< 0 || i2 < 0 || i < 0){
throw "stringconcat error";
}
wchar_t* w = new wchar_t[i];
if(!w){throw "error";}
wcsncpy(w,s1,i1);
#ifdef _MSC_VER
_itow(ii2,w+i1,10);
#else
swprintf(w+i1,L"%d",ii2);
#endif
return w;
}
0581デフォルトの名無しさん
NGNG//(1)lexical_cast + wstring::operator+ + vector 0.343 0.359 0.343
B_PRE
std::vector<std::wstring> ar; ar.reserve(MAX_LOOP+10);
B_START(i)
ar.push_back(L"boost" + boost::lexical_cast<std::wstring>(i) );
B_END
//(2)試しに狡をする wstringstream + vector 0.25 0.234 0.234
B_PRE
std::vector<std::wstring> ar; ar.reserve(MAX_LOOP+10);
std::wstringstream s; s << L"boost";
B_START(i)
s.rdbuf()->pubseekpos(5);
s << i;
ar.push_back(s.str());
B_END
//(3) stringconcat + shared_ptr + vector 0.109 0.11 0.11
B_PRE
std::vector<boost::shared_ptr<wchar_t> > ar; ar.reserve(MAX_LOOP+10);
B_START(i)
ar.push_back(boost::shared_ptr<wchar_t>( stringconcat_i(L"boost",i) ));
B_END
//(4) stringconcat + vector 0.078 0.063 0.063
B_PRE
std::vector<wchar_t*> ar; ar.reserve(MAX_LOOP+10);
B_START(i)
ar.push_back( stringconcat_i(L"boost",i) );
B_FINALLY_BEGIN
B_TIMER
for(std::vector<wchar_t*>::iterator itr = ar.begin();itr!=ar.end();itr++){ delete (*itr); }
B_FINALLY_END
}
0582デフォルトの名無しさん
NGNG結果を統一しないと、道具が遅い根拠にはならないだろ。
あと、
不要なマクロ使いすぎ。
deleteとdelete[]を混同してる。
newで0が返ってくるのは非標準。
0583修正
NGNGそうだったね。
for(std::vector<wchar_t*>::iterator itr = ar.begin();itr!=ar.end();itr++){ delete [] (*itr); }
に修正してください。
>vectorの中身がいろいろちがうじゃねぇか。
std::wcout << ar[i].c_str();でみたけどOKだったけどちがた?
>newで0が返ってくるのは非標準。
どのように処理するのがいいのでしょうか?
0584578
NGNG0585デフォルトの名無しさん
NGNGCls c = new Cls;
catch (std::bad_alloc& ex) {
// 確保できんかった
}
または、
Cls s = new(std::nothrow) Cls;
if (s == 0) {
// 確保できんかった
}
コンパイラ毎の対応は知らん。
0586デフォルトの名無しさん
NGNG- catch (std::bad_alloc& ex) {
+ } catch (std::bad_alloc& ex) {
0587修正2
NGNGstd::vector<boost::shared_array<wchar_t> > ar; ar.reserve(MAX_LOOP+10);
ar.push_back(boost::shared_array<wchar_t>( stringconcat_i(L"boost",i) ));
これも少し訂正してみました。>>585
wchar_t* stringconcat_i(const wchar_t* s1,int ii2){
const int i1 = wcslen(s1);const int i2 = 6*sizeof(int);
const int i = i1+i2+1;
if( i1 > i || i2 > i || i1< 0 || i2 < 0 || i < 0){throw "stringconcat error";}
wchar_t *w= 0;
#ifndef BOOST_NO_EXCEPTIONS
try{w = new wchar_t[i];}
catch(...){
//delete [] w; //?
throw;
}
#else
w = new wchar_t[i];
if(w == 0){
//delete [] w;//?
throw std::bad_alloc();
}
#endif
wcsncpy(w,s1,i1);
#ifdef _MSC_VER
_itow(ii2,w+i1,10);
#else
int iResult = swprintf(w+i1,L"%d",ii2);
if(iResult == -1){throw"stringconcat error";}
#endif
return w;
}
0588デフォルトの名無しさん
NGNGまずは文字列の保持の仕方を固定にしろ。
あと、
BOOST_NO_EXCEPTIONSはユーザーが使うものじゃない。
速度のテストに条件コンパイル使ってたら結果がどれによるものかはっきりしない。
>>585
nothrow使ってもクラスのコンストラクタからの例外は飛んでくるぞ。
0589588
NGNGごめん。これはうそだった。ちゃんとドキュメントに載ってるな。
でも使い方が間違ってる。
このマクロが定義されているときは、コンパイラは例外処理をサポートしない。
0590578(その1)
NGNG>>588さん、ご指摘ありがとうございます。
//includeは580のを使ってください
#define MAX_LOOP (100000)
#define B_LOOP (3)
#define B_TYPE1 //片方の方が精度が良い
#define B_TYPE2 //片方の方が精度が良い
#define B_INI boost::timer tmr;double td1=0;double td2=0;
#define B_PRE td1=0;td2=0; for(int j=0;j<B_LOOP;j++){ { tmr.restart();
#define B_START(i) for(int i=0;i<MAX_LOOP;i++){
#ifdef B_TYPE1
#define B_TIMER1 td1 += tmr.elapsed();
#else
#define B_TIMER1
#endif
#ifdef B_TYPE2
#define B_TIMER2 td2 += tmr.elapsed();
#else
#define B_TIMER2
#endif
#define B_FINALLY_BEGIN }
#define B_FINALLY_END } B_TIMER2 } std::wcout << td1/B_LOOP << " : " << td2/B_LOOP <<std::endl;
#define B_TIMER B_TIMER1
#define B_END B_FINALLY_BEGIN B_TIMER B_FINALLY_END
0591578(その2)
NGNGconst int i1 = wcslen(s1);
const int i2 = 3*sizeof(int)+2;//3>(8*LOG10(2))
const int i = i1+i2+1;
if( i1 > i || i2 > i || i1< 0 || i2 < 0 || i < 0){ throw "stringconcat error"; }
wchar_t *w = new wchar_t[i];//std::bad_alloc() or SPEC
if(w == 0){throw"stringconcat error";}//(非標準)
wcsncpy(w,s1,i1);//no error
#ifdef _MSC_VER //VC
_itow(ii2,w+i1,10);//no error
#else //Other Compiler
int iResult = swprintf(w+i1,L"%d",ii2);
if(iResult == -1){throw"stringconcat error"; }
#endif
return w;
}
int main(){//環境はVC2003 -O2(最適化) です
B_INI
std::cout << "ループ終了時: スコープ脱出時" << std::endl;
//(1)lexical_cast + wstring::operator+ + vector
std::cout << "lexical_cast<wstring> , wstring::operator+ , vector<wstring>" << std::endl;
B_PRE
std::vector<std::wstring> ar; ar.reserve(MAX_LOOP+10);
B_START(i)
std::wstring s=L"boost"; s+=boost::lexical_cast<std::wstring>(i);
ar.push_back(s);
B_END
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int,int> mt1, mt2;
int a=10;
a;
return 0;
}
というプログラムを組むと、
warning C4786: 'std::reverse_bidirectional_iterator<std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,st
d::allocator<int> >::iterator,std::pair<int const ,int>,std::pair<int const ,int> &,std::pair<int const ,int> *,int>' : 識別子が '255' 文字に切り捨てられました (debug 情報内)。
などの警告が6つでます。
また、最初のintをstringに変えると(#include <string>済み)、77個の警告が出ます。
どうすればこの警告は消えるのでしょうか?
0594578(その3)
NGNGstd::cout << "wstringstream , vector<wstring>" << std::endl;
B_PRE
std::vector<std::wstring> ar; ar.reserve(MAX_LOOP+10);
std::wstringstream s; s << L"boost";
B_START(i)
s.rdbuf()->pubseekpos(5); s << i;ar.push_back(s.str());
B_END
//(5) stringconcat + wstring + vector
std::cout << "stringconcat , vector<wstring>" << std::endl;
B_PRE
std::vector< std::wstring > ar; ar.reserve(MAX_LOOP+10);
B_START(i)
wchar_t *wA = stringconcat_i(L"boost",i);ar.push_back(std::wstring(wA));delete [] wA;
B_END
//(3) stringconcat + shared_ptr + vector
std::cout << "stringconcat , vector<shared_array<wchar_t> >" << std::endl;
B_PRE
std::vector<boost::shared_array<wchar_t> > ar; ar.reserve(MAX_LOOP+10);
B_START(i)
ar.push_back(boost::shared_array<wchar_t>( stringconcat_i(L"boost",i) ));
B_END
//(4) stringconcat + vector
std::cout << "stringconcat , vector<wchar_t*>" << std::endl;
B_PRE
std::vector<wchar_t*> ar; ar.reserve(MAX_LOOP+10);
B_START(i)
ar.push_back( stringconcat_i(L"boost",i) );
B_FINALLY_BEGIN
B_TIMER
for(std::vector<wchar_t*>::iterator itr = ar.begin();itr!=ar.end();itr++){ delete [] (*itr); }
B_FINALLY_END }
0596592
NGNG0597デフォルトの名無しさん
NGNG何を整理したつもりなんだ?混沌としたままじゃないか?
それじゃテストにならん。
引き取るか出直すかしてきてくれ。
0598デフォルトの名無しさん
NGNGそういう検索の仕方もあるのですね
ありがとうございました
ttp://www.nitoyon.com/vc/reference/error.htm
を[C4786 表示]で検索して探り当てました
0599デフォルトの名無しさん
NGNG一言一言、う○ーな。
テストなんかしてねーよ。
578-579をよく読め。
0600デフォルトの名無しさん
NGNG#include <map>
class Draw {
private:
static map< HBITMAP, int > hBit;
static map< HDC, int > memDC;
public:
InitDraw();
};
error C2143: 構文エラー : ';' が '<' の前に必要です。
error C2059: 構文エラー : '<'
error C2238: ';' の前に不正なトークンがあります。
おそらくHBITMAPなどのせいかと思いますが、どのようにすればよいのでしょうか?
0601デフォルトの名無しさん
NGNG付け足したらうまくいきました・・・
0602デフォルトの名無しさん
NGNGSTLを使う前のあの呪文がねぇ。
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNGtemplate<typename TYPE, size_t N>
inline size_t elemof(TYPE (&)[N]) { return N; }
0605デフォルトの名無しさん
NGNGttp://www.tietew.jp/cppll/archive/9004
この辺も参照しとけ。
0606デフォルトの名無しさん
NGNG一般常識。
>>605
おはなしがふるい。
0607デフォルトの名無しさん
NGNGこっちも見とけ。
http://pc2.2ch.net/test/read.cgi/tech/1058213523/44
0608604
NGNG追加情報もありがトン。
0609デフォルトの名無しさん
NGNGnamespace Count
{
template<typename T, size_t N>
inline const char (&elemof_(T (&)[N]))[N];
const int elemof_unity_ = 1;
}
#define elemof(array) elemof_unity_ * (sizeof Count::elemof_((array)))
0610_
NGNG0611デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNGそれじゃ elemof_unity_ の意味がないだろ。
const size_t elemof_unity_ = sizeof(char);
#define elemof(array) ((sizeof Count::elemof_((array))) / elemof_unity_)
こうじゃないのか?
あと、template 引数の size_t はこの場合、int のほうがよかないか?
0614デフォルトの名無しさん
NGNG(・∀・)イイ
0615デフォルトの名無しさん
NGNGそれじゃ、Count::elemof( a ) と書けないだろ。
0616デフォルトの名無しさん
NGNGelemof_unity_ の意味を勘違いしてたよ、スマソ。
0617609
NGNGこれじゃ意味が無かったなー。
と今さら言ってみる。
0618デフォルトの名無しさん
NGNGprintfを書き換えるのに使えるようなものが欲しい。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG>>618はsprintf()と間違えたんとちゃうか?
0622デフォルトの名無しさん
NGNGC++の標準ライブラリなんてほとんどテンプレートじゃないかと
思うんだが。
0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNGiostream は、basic_iostream テンプレートクラス の typedef だろ?
0625デフォルトの名無しさん
NGNG0627623
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNGtypedef basic_string<char, char_traits<char>, allocator<char> > string;
0630デフォルトの名無しさん
NGNG>>627
typedef basic_string<char, char_traits<char>, allocator<char> > string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<char> > wstring;
0631デフォルトの名無しさん
NGNG関数アダプタとかをうまく組み合わせて共通アルゴリズムの sort でソートできませんかね?
0633デフォルトの名無しさん
NGNGcompose も select2nd もVC6にはないや・・・
0634デフォルトの名無しさん
NGNG環境が固定されてるとかで入れられないなら、作ってもよし。こんな感じで。
template< typename FN, typename OP1, typename OP2 >
struct binary_compose:public std::binary_function<OP1::argument_type, OP2::argument_type, FN::result_type>
{
FN& fn;
OP1& op1;
OP2& op2;
binary_compose(const FN& f, const OP1& p1, const OP2& p2):fn(f), op1(p1), op2(p2) {}
result_type operator( first_argument_type p1, second_argument_type p2){
return fn( op1(p1), op2(p2) );
}
}
template< typename FN, typename OP1, typename OP2 >
binary_compose< FN, OP1, OP2 >
compose2(const FN& f, const OP1& p1, const OP2& p2)
{
return binary_compose<FN, OP1, OP2 >( f, p1, p2 );
}
template<class PAIR>
struct select2nd : std::unary_function<PAIR,PAIR::second_type> {
PAIR::second_type operator()(const PAIR& x) const
{
return x.second;
}
};
0636デフォルトの名無しさん
NGNGwarningとerrorが出て通らなくなってしまったんですが
何がマズイんでしょうか?
template<typename T> class Manager
{
protected:
typedef std::list<T*> Array;
typedef Array::iterator ArrayIterator; //ここでwarningとerror
Array Items_;
public:
virtual ~Manager() { Clear(); }
void Add(T* item) { Items_.push_back(item); }
void Add(const Array& array){ Items_.merge(array); }
int size() const { return Items_.size(); }
void Clear()
{
for(ArrayIterator it=Items_.begin(); it!=Items_.end(); ++it)
delete *it;
Items_.clear();
}
};
エラーとワーニングはこんな感じです
warning C4346: 'std::list<_Ty*>::iterator' : 依存名は型ではありません。
型を指定するには、'typename' を含むプレフィックスを使用してください。
コンパイルされたクラスのテンプレートのインスタンス化 'Manager<T>' の参照を確認してください
error C2146: 構文エラー : ';' が、識別子 'ArrayIterator' の前に必要です。
error C2501: 'Manager<T>::ArrayIterator' : 識別名を宣言するのに、型が指定されていません。
0637デフォルトの名無しさん
NGNG>>492のあたり
関係ないけどVCの「コンパイルされた」っていうの冗長じゃね?
0638デフォルトの名無しさん
NGNGUの比較をする関数をつくって、sortに渡してやればいいです。
0639デフォルトの名無しさん
NGNG>typedef Array::iterator ArrayIterator;
ここは
typedef typename Array::iterator ArrayIterator;
こう
Array::iteratorだけではそれが型名かどうか判別できないから。
0640デフォルトの名無しさん
NGNGcout << sbuf;
みたいに書けないんでつか?
0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNGはい
0643デフォルトの名無しさん
NGNG違った。
sortに渡すのは、pairのsecondを比較する関数。
Uの比較演算子の定義もするという、二段構えだと、オブジェクト指向っぽいね。
0644デフォルトの名無しさん
NGNG書きまくってますが
0645デフォルトの名無しさん
NGNGおそらく
#include <string>
を忘れている。
0646デフォルトの名無しさん
NGNGvc6だとできなかっった鴨試練。
代わりに
cout << sbuf.c_str();
とでもして。
0647デフォルトの名無しさん
NGNGできないのは VC5 までじゃなかったっけ?
うろ覚えだが。
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGbasic_ostream<char>&
operator<<(basic_ostream<char>&, const string&);
の定義がない罠
0650デフォルトの名無しさん
NGNG0651649
NGNG0652デフォルトの名無しさん
NGNGstd::
を付け忘れてるとか
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNGtypedef std::vector<A> B;
typedef std::vector<B> C;
class D {
std::vector<C> vec;
int flag
void vsort(int index);
};
の時、vsort内でstd::sortを使ってvec内のB[n].strをキーにしてvecをソートしたいの
ですが、どうすればいいですか?flag==indexの時は逆順ソートがしたいです。
叙述関数ってのが良くわかんないです。
0656デフォルトの名無しさん
NGNGnはどっから出てきた?
0657デフォルトの名無しさん
NGNG0658山崎 渉
NGNG0659デフォルトの名無しさん
NGNGvectorだと&vec[0]とかで、mapだと&m[7]見たいな感じでアドレスが取得できるみたいだけど
setの場合はどうしたらいいの?
set<int>::iterator it = s.find(7);
int* p = ⁢
だとイテレータのアドレスになってしまうよね。
変なことやってると思うかもしれないけど既存のCのプログラムとの関係でアドレスが欲しいです。
setじゃ無理かな?教えてください。
0661デフォルトの名無しさん
NGNG&*it
0662デフォルトの名無しさん
NGNG> vectorだと&vec[0]とかで、mapだと&m[7]見たいな感じでアドレスが取得できる
vector以外でそれやるの危険では・・・。
0663デフォルトの名無しさん
NGNGstruct GenTypelist;
template <typename T1>
struct GenTypelist<T1,NullType,NullType,NullType>{
typedef TYPELIST_1(T1) Result;
};
template <typename T1,typename T2>
struct GenTypelist<T1,T2,NullType,NullType>{
typedef TYPELIST_2(T1,T2) Result;
};
template <typename T1,typename T2,typename T3>
struct GenTypelist<T1,T2,T3,NullType>{
typedef TYPELIST_3(T1,T2,T3) Result;
};
typedef GenTypelist<char,short,long>::Result Intengers;
ふと思いついたんだけど、既出?
BOOST_PPのあたり使って作っておくと面白そう
0664663
NGNGstruct GenTypelist{
typedef Typelist<T1,GenTypelist<T2,T3,T4,NullType>::Result> Result;
};
template <>
struct GenTypelist<NullType,NullType,NullType,NullType>{
typedef NullType Result;
};
書き込んでから思いついた・・・
0665デフォルトの名無しさん
NGNG*((&m[0]) + i) とかはvector以外では無理だが、
別に単にアドレスとっても問題なかろう。
どうもありがとう。
初め見たとき参照のアドレス?みたいなのになってエラーになるかと思ったけどならないのね。
ただ返す型はconst int *になってたみたい。setは内容変えないようになってるんだね。
まあ自分のプログラムも変えないからconstへのポインタでOKなんだけど。
>>662
ほんのちょっとの間、Cの関数に渡すのです。
その間、要素を削除しないことは保証できるから大丈夫なんじゃない?
実際はintなんかじゃなくてもっと大きい構造体なんかが入ってるからポインタ渡しになってます。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGってgdbに言われました。しかし、意味がわかりません・・・
ore % g++ --version
g++ (GCC) 3.2 20020927 (prerelease)
Copyright (C) 2002 Free Software Foundation, Inc.
冒頭のメッセージは一体何を伝えたいのでしょうか・・・。
0669デフォルトの名無しさん
NGNGvectorとlistのソートの実験したら、listの方が3倍くらい早かった。
0670デフォルトの名無しさん
NGNG要素の型によってんなもん変わるだろ
0671デフォルトの名無しさん
NGNGstlport、vc6 です
ファイルを読みこんで、その中身を元に末端にデータを追加するんですが、
読み込みしかできないのです
std::fstream file;
file.open ( "test.txt", std::ios::binary | std::ios::in | std::ios::out );
.............// read など
.............// データ解析
.............// write など
file.close();
読み書きが出来る様にする方法を教えてください
おねがいします
0672デフォルトの名無しさん
NGNG0673669
NGNGboost::shared_ptr で実験してみました。
intのメンバだけもったクラスをポインタにしてみたんだが、
1000個くらいのポインタをコンテナにぶち込んだあと
intでソート、その後ポインタでソートを10000回くらい繰り返してみた。
まぁ、1000個ポインタぶち込むとこからループさせたらあまりかわらなくなったけどね。
>>671
www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/manuals/stdlib/user_guide/loc_io/index.htm
homepage1.nifty.com/emil/stream.html
homepage1.nifty.com/tnomakuchi/studying/programming/iostream.htm
www.jah.ne.jp/~naoyuki/Writings/ExtIos.html
ahiru.portland.co.uk/tips/stlsmp.shtml
www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
www.kab-studio.biz/Programing/Codian/iostream/06.html
0674671
NGNGお騒がせしました
失礼致します
0675デフォルトの名無しさん
NGNGstd::iter_swap<std::list<T>::iterator, std::list<T>::iterator>
がうまく特殊化されてるんじゃないの?
0676デフォルトの名無しさん
NGNGなぜでしょうか?
0677デフォルトの名無しさん
NGNGプログラムありませんかね?
0678デフォルトの名無しさん
NGNG×template関数
○関数template
0679デフォルトの名無しさん
NGNG×関数やクラスtemplate
0680デフォルトの名無しさん
NGNG両方×かよw
0681デフォルトの名無しさん
NGNGお気に入りに入れてるお勧めなHPありますか?
0682デフォルトの名無しさん
NGNGstd::string のなにを知りたいんだ?
0683デフォルトの名無しさん
NGNG良いHPじゃなくて悪かったな。
0684デフォルトの名無しさん
NGNG681の知りたいことを予想してみる。
ずばりcodecvt。
ていうかむしろ俺が知りたい。
日本語でよろしく。
ググレってか?
0685山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0686デフォルトの名無しさん
NGNG,、:'":::::::::::::::::``:...、
/::::::::::::::::::::::::::::::::::::::\
i::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
!::::::::::::::::::::::;‐、:::::::::_::::::_::::';
|::::::::::::::::::::::| :: ̄ ``!
r''ヾ'::::::::::/ :: |
l r‐、\::/ _,,、ii_;;_、 _,,,l、
ヽヾ〈 ::= -r:;;j_;、`/ :;'ィ;7
!:!_,、 :: ` ー : |: `´/
,./ヽ | 、_ :: ,: 'r' :i |: /
,../ `ヽ;_ i | '"、_:::__`:'‐'. / なんかもう必死でしょ?
/ ``'ー 、_\ ! `::` ̄''`チ`シ
/ー 、_ `\:、_ :: ` ̄/ 最近の山崎渉
/ ``ヽ、 ヽ`'7‐--'゛
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGconst vector<int> v(3);
0691デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGこいつ質問者の態度じゃないな。
0695デフォルトの名無しさん
NGNGさっそくboostを入れました。
typedef boost::array<int, 3> bai3;
で、できました。
std::vectorで同様のことができなそうなので、あきらめます。
ありがとうございました。
>>694
((((((≧∇≦)))))) ブハハハハ
0696デフォルトの名無しさん
NGNGちょっとワロタがやはりおまいは氏ね。
0697デフォルトの名無しさん
NGNG放置しる
0698デフォルトの名無しさん
NGNG0699直リン
NGNG0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG何が言いたいのだろう?。これってLokiのTypelistじゃん
http://sourceforge.net/cvs/?group_id=29557
0702デフォルトの名無しさん
NGNGなにいまごろ釣られてんだよw
0703デフォルトの名無しさん
NGNGTYPELIST_2() とか TYPELIST_3() とかいう要素数が名前に入った
マクロ使わずに GenTypeList<>::Result で書けて便利、てことじゃねーの?
mpl 使えって感じだが。
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGこっちのスレじゃなくて?
0706デフォルトの名無しさん
NGNGおー。1つはあったんですね。
それ以外にはもうないんでしょうか?
0708デフォルトの名無しさん
NGNG前Lokiのソース見た時あったぞ
0709デフォルトの名無しさん
NGNGtemplate <typename T>
class CTypeAttribute
{
private: template <typename U> class CNonConst { public: typedef U ResultType; };
private: template <typename U> class CNonConst<const U> { public: typedef U ResultType; };
public: typedef CNonConst<T>::ResultType NonConstType;
};
としたら、public: typedef CNonConst<T>::ResultType NonConstType; の行で
ResultType は implicitly a typename だという警告が出てしまいます。
暗示的な型ってどういう意味でしょう?警告の抑制以外で、この警告を出さないようにするには?
よろしくお願いします
0710>>2ちゃんねらーの皆さん
NGNGhttp://www.hokekyoji.com/
http://www.yakuyoke.or.jp/
http://members.tripod.co.jp/hossyoji/index/
http://www.maap.com/tanjoh-ji/
http://www.honmonji.or.jp/
http://www.maap.com/tanjoh-ji/
http://www.kuonji.jp/
http://www.butsuzou.com/jiten/sanmen.html
http://www.butsuzou.com/list1/sanmen2.html
http://www.butsuzou.com/list1/sanmen3.html
http://www.butsuzou.com/keitai/sanmen-kz.html
0711709
NGNGpublic: typedef typename CNonConst<T>::ResultType NonConstType;
ですね。
07127
NGNG☆★ 無修正DVD★☆なら 新宿歌舞伎町直送 ☆★
人気爆発新作ベスト9入荷
堤さやか引退特集 憂木瞳 プロジェクトX No8 ベイビーフェイスをやっちまえ
白石ひより・愛葉るび SNAPSHOT 地下映像陵辱援交 すぎはら美里痴女教師
店頭販売の売れ筋のみ厳選してみました 安心の後払い
http://book-i.net/moromoro/
白石ひとみ 小森詩 山田まり 長瀬愛
@@ 及川奈央 レジェンド @@ 堤さやか 東京バーチャル 依然大好評
サンプル画像充実 見る価値あり 最高画質
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
0713デフォルトの名無しさん
NGNG□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
0714 ◆bYHudLsQLw
NGNG関数オブジェクト・ファンクタ・ファンクタクラスが良く分かりません。
豊富に例が載っているサイト・書籍を紹介していただけませんか?
0715デフォルトの名無しさん
NGNGC++Primerの改訂3版の617ページ当たりからならどうか。
あるいは
http://www.kab-studio.biz/Programing/Codian/STL/02.html
当たりを見るとか。
0716デフォルトの名無しさん
NGNGC++第3版では関数オブジェクト、
Effective〜ではファンクタと呼んでるが
同じものかな?
0717デフォルトの名無しさん
NGNG同じものじゃん。
0718デフォルトの名無しさん
NGNGC++第3版のP593に、
関数呼び出し演算子を持つクラスのオブジェクトは、
関数的オブジェクト: function-like object, functor あるいは単純に
関数オブジェクト: function object と呼ばれる。
って書いてある。つまりまったく同じ物を指してる。
0719デフォルトの名無しさん
NGNG関数オブジェクトはその名の通り関数の機能を持つオブジェクトで
内部状態を持ち得ない。ファンクターは関数的なオブジェクト、
すなわち形式的に関数オブジェクトと同じ形をしているもので
内部状態を持ち得る、或いは持っている物を指す。といった具合か。
ん?つまり違う物を指すんじゃないか
>つまりまったく同じ物を指してる。
この結論はどこから?
0720デフォルトの名無しさん
NGNG内部状態云々はどこから・・・
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG(゚Д゚)ハァ?(゚Д゚)ハァ?(゚Д゚)ハァ?(゚Д゚)ハァ?(゚Д゚)ハァ?(゚Д゚)ハァ?
0723719
NGNG0724デフォルトの名無しさん
NGNG基礎からC++をやり直される事をおすすめします。
0725719
NGNG0726デフォルトの名無しさん
NGNG0727719
NGNG関数と内部状態の関係が分からなかった奴は特にな
0728デフォルトの名無しさん
NGNGどっちみち先が見えてるな。
0729719
NGNG漢字が違うよバーカ
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG単純だなお前
0736デフォルトの名無しさん
NGNGメンバとしてもっているstringやlistは
そのオブジェクトをdeleteするときに、list::clear()や
string::remove()しなければいけないのでしょうか?
0737デフォルトの名無しさん
NGNGlist や string のデストラクタでちゃんとやってくれる。
0738736
NGNGレスありがとうございます!
が、すいません、ということはやっぱり
明示的にlistなどのデストラクタを呼ばなきゃなのでしょうか?
勝手にやってくれるのかな…でもスコープ
外れるわけでも、delete使うわけでもないし…うーん
0739デフォルトの名無しさん
NGNGJava厨?それともC#厨?
C++ だと、new で動的に確保したのは delete しないと駄目だけど、
静的確保した変数はデストラクタ自動的に呼ばれるよ。
0740714 ◆bYHudLsQLw
NGNGお答えいただいた方どうもありがとうございました。
0741デフォルトの名無しさん
NGNGなるほど、どうもです
■ このスレッドは過去ログ倉庫に格納されています