1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
207 名前:デフォルトの名無しさん [2008/03/02(日) 22:08:50 ] string tmp; cin >> tmp; としたとき、改行だけが押されたことを知るにはどうすればいいですか?
208 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:16:47 ] >>207 フォーマット入力はデフォルトでは空白類記号は読み込まれない。
209 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:29:59 ] gcc をつかった 分割コンパイルの仕方がわからないのですが わかりやすく解説したページはないでしょうか?
210 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:33:01 ] gcc -c hoge1.c gcc -c hoge2.c gcc -c hoge3.c gcc -c hoge4.c gcc -o hoge hoge1.o hoge2.o hoge3.o hoge4.o
211 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:55:20 ] >>209 Makefileでググれば、良いと思う。
212 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:35:02 ] namespace Name { class Cls; }
213 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:48:48 ] 丸一日前のレスにレスか
214 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:52:06 ] Makefileとbjamとどっちがいい? やっぱ標準であるmakeは一通りやっとくべきかな?
215 名前:デフォルトの名無しさん [2008/03/03(月) 01:14:07 ] >>208 ありがとうございます。一応自分で書いてみましたが、まだうまく動きません。 noskipwsをした後、おかしくなります。 どうかよろしくお願いします。 std::string filename = "default_file.txt"; while (1) { std::string tmp; cout << "Input file name : (hit return to default: " << filename << ") "; cin >> std::noskipws >> tmp; // 下の(1)でY以外で答えたとき、ここで入力を受け付けてくれない。 if (tmp.empty()) { // リターンキーだけが押された場合に、ここのIF文に入る tmp = filename; } cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); cin >> std::skipws; cout << "filename : " << tmp << " OK (Y|N) ? "; std::string ans; cin >> ans; // (1) if (ans == "Y") { filename = tmp; break; } }
216 名前:デフォルトの名無しさん [2008/03/03(月) 02:22:41 ] stdlib.hの中で_CRT_DOUBLE_DECと_LDSUPPORTを定義してないとき_CRT_DOUBLE、_CRT_FLOATといった構造体を用意してるようですが、 _CRT_DOUBLE_DECと_LDSUPPORTとこの2つに囲まれた構造体などは何のために用意してるんですか?
217 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 02:31:37 ] >>215 改行は読み込まないからgetlineがいい。 std::string filename = "default_file.txt"; while (1) { std::string tmp; std::cout << "Input file name : (hit return to default: " << filename << ") "; std::getline(std::cin, tmp); if (tmp.empty()) { tmp = filename; } std::cout << "filename : " << tmp << " OK (Y|N) ? "; std::string ans; std::getline(std::cin, ans); if (ans == "Y") { filename = tmp; break; } }
218 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 02:43:47 ] C++ってどういう業界の人がつかってるの? GUIでMFCやVCL、Qtさわるくらいはあるが、 ゲーム以外でフルスクラッチで書き上げる人たちって どういう人?
219 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 02:44:13 ] 趣味
220 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 03:24:20 ] やっぱそうか。 抽象化なんて考えてる暇あったら別の仕事が 飛んでくるもんね。
221 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 03:25:01 ] 最近C#なんか使う企業もねえ
222 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 03:50:36 ] つまりCωの時代がやってくると。
223 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 03:57:12 ] 時代はwebアプリか・・・
224 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 03:58:37 ] 業務ソフトなら実際C#とか.NETでもなんら問題なくなってきてるご時世だもの
225 名前:デフォルトの名無しさん [2008/03/03(月) 03:59:03 ] 俺は金融関係だけど、C++使ってるよ。 matlabを使うとこも多いけど。
226 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 04:00:20 ] 自動車関係企業のシステム部門ってC/C++使うのかなぁ
227 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 04:01:14 ] いかにも使いそうじゃないか
228 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 04:05:58 ] >>226 COBOLとか使うと思うんだ、経験則
229 名前:デフォルトの名無しさん [2008/03/03(月) 04:51:56 ] 昨日から色々質問させてもらっているものです。 色々分かってきたのですが、getlineとcinとの併用のときにどう書くべきかわかりません。 #include <iostream> using namespace std; int main() { int a; string s; cout << "int: "; cin >> a; // cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "string: "; getline(cin, s); cout << "int: "; cin >> a; return 0; } 上記のソースでコメントアウトしている箇所がありますが、コメントアウトしたままだと、 真ん中のstringの入力が、1つめのintの入力の改行を拾ってしまうせいで、とばされてしまいます。 そこで質問なのですが、ここにコメントアウトされている行をいれるのは正しいですか?
230 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 05:00:45 ] >>229 コメントアウトした行を入れてもだめ。 cin >> a; で改行文字がバッファに残るため、それが次のgetlineで 読み取られてしまう。Cで言う所のscanf()とgets()を混在させた問題と同じ。 解決策はgetline(cin, s); をもう一つ付け足して改行文字を読み飛ばす。 もしくはgetline()に統一する。
231 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 05:37:29 ] 今の所COBOL、PL/I、Java、JS、Access、Rubyを見たことがある
232 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 05:42:58 ] >>225 金融っていってもmatlab使ってるようなところは 複雑な数値計算やってるだろうからちょっと特殊だな。 車でもカーナビのように限られたリソースでGUI作るようなところは 使ってるだろうが、間違っても制御には使わんと思うんだが。
233 名前:デフォルトの名無しさん [2008/03/03(月) 05:53:38 ] >>230 ありがとうございます。 getline()とcinを混在させないのが一番いいと。でも、cinが便利なので、 基本的にはcinを使いつつ、cinだと改行を扱うのが不便なのでその時だけgetline()を 使う、という風になりそうです。(自分としては) すると、 (1)getline()する前にバッファに改行が残っているか確認して、残っていれば消す。 (2)cinした後には改行を消しておく。 のどっちかになると思うのですが、今回は(1)の方法が分からなかったので、(2)で実装しました。 どっちにしても、cin関係はなんか使いにくい感じ。
234 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:03:00 ] linux のmmapのこと調べてて疑問に思ったので質問。 mmap でファイルを仮想メモリにマッピングしたとき、OSがファイル上のデータを ブロック転送する、アプリがその領域に書き込むとOSがファイルにそれを反映すると 書いてあった。 mmapでマップされた領域に上のあるアドレスに代入したとき、 OSは代入されたことを知っているの? 代入演算子で値を放り込むことと、read write のシステムコールを使うのは 根本的に違いますよね?
235 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:03:27 ] >>218 GEANTは4からC++だよ!
236 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:09:53 ] >>234 C/C++の問題じゃないと思う 多分OSがマッピングした領域は書き込み不可の属性が付いており 書き込んだらCPUに割り込みがかかってそれを利用してファイルに反映してるか そんな所だと思う
237 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:14:44 ] >>236 失礼しました。 環境に依存する内容は避けたほうがよいですね。
238 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:52:21 ] >>237 環境依存OKのスレだから問題ないんだけどC/C++よりも linuxの話になるね ちなみにWindowsの仮想メモリとメモリマップトファイルも似たような 機構で実現している
239 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 07:59:34 ] 複数ある単語から文字列中最初にマッチする物を探す用途で、 こんなのを考えてみたのですが、こういう2分木辞書ってなんて 名前になるんでしょうか? サフィックスツリー?(これよりもっと複雑なようですが) typedef std::map<char, Node> Tree; //char に単語の1文字が入る struct Node { Node *pChild; //次の文字ノード int No; //登録番号、兼、非末端(-1) } 単語がab,ba,ac,abcとあるなら、子ノードの繋がりが下記のようになる。 先頭 <a,-1> <b,-1> / \ / <b,0> <c,3> <a,1> / <c,3>
240 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 08:01:07 ] 訂正 struct Node { Tree *pChild; int No; }
241 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:10:06 ] &ClassName::memberVarName; って演算はいったい何を行っているのでしょうか? 最初オフセット値を得ているのかと思ったんですが、ためしに出力しても、1が出力 されるだけです。 元ソースでは、これを引数にしてメンバ変数のオフセット値を得ているようですが…
242 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:11:38 ] >>241 メンバポインタでぐぐれ
243 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:27:45 ] >>242 ありがとうございます。おかげで理解できました。 メンバポインタからオフセット値を得るには、 &( static_cast<A*>(0)->*memPtr ) で仕様上問題ないでしょうか?
244 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 09:35:43 ] 単にオフセットが欲しいんなら offsetof を使えばいい
245 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:13:30 ] >>243 実際には動くだろうけど、仕様上は良くないような ちゃんとインスタンスを用意した方がいいんじゃない
246 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 11:30:26 ] >>243 オフセットは POD 型に対しての offsetof でしか取れないよ。 素直にメンバポインタ通して参照しちゃダメなの?
247 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 12:07:59 ] >>229 仕様上正しい。 以下はJosuttis本の記述の要約。 istream& istream::ignore(streamsize count, int delim) This form ignores up to count characters until delim is extracted and discarded. (ストリームから改行まで抽出されて捨てられる。) ちなみにg++ 4.0では無問題だった。
248 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 12:50:21 ] >>239 トライ木じゃねえの
249 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:03:37 ] >>236 割り込みなんかかからない。 ページング機構を備えるどんなプロセッサでも(俺の知る限り) プロセッサ自体に、書き込まれたかどうかのフラグ (いわゆる、dirty bit と呼ばれるもの)をセットする機構がある。 例えばx86ならば、ページテーブルの該当ページを示すエントリ内にこれがある。 で、ファイルから読み込んだときにOSがこのフラグをリセットしておき OSは、ページが不要になった時やsync要求が来たときにこのフラグを確認して 書き戻すか破棄するかを決定する。
250 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:09:16 ] >>248 それみたいですね。 すっきりしました、感謝。
251 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 16:48:21 ] >>245 ,246 仕様上ダメですか…違う方法を模索することにします。
252 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:58:31 ] >>249 すみません。 read write のようなシステムコールを実行するとOSデバイスドライバが あとは処理してくれますよね? 代入演算子を使ってmmapした領域に書き込むとき、 そのフラグもセットするようにgccが実行ファイルを生成してくれるのでしょうか? でもそれだと操作するアドレスがどこなのかをプログラムソースには書かなくても実行ファイルの中では 毎回見ているということでよろしいのでしょうか?
253 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:15:49 ] dirty bitを立てるのは249に書いてあるとおりCPUの仕事。 特にコンパイラがすることはない。
254 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:47:57 ] 仮想記憶でぐぐればいいと思うよ。
255 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:51:42 ] ちなみに、少し前のLinuxカーネルのバグは この複数からの同一ページへのアクセス時に このフラグをうまく処理しなかったかららしい。 また、少し違うが phenomのバグはキャッシュに対するdirty bitの反映が 高負荷時に滞るというものらしい。
256 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:03:13 ] もう少し補足すると、 普通のページング可能なプロセッサは、 TLBと呼ばれる、ページテーブルのキャッシュを内部に持っている。 (x86以外では呼び方が違うかもしれない) したがって、該当ページへの書き込みがある度に 毎回物理メモリ上のページテーブルに書き込んだりはしない。 (TLB内の情報と変更があった場合のみ、書き込む) で、このTLBの内容を書き戻すときにまずキャッシュに書き込むわけだけど これがうまくいかない場合がある、というのがphenomのバグらしい。 L1とL2の関係もあるとかどっかで読んだが詳しくは覚えてない。
257 名前:デフォルトの名無しさん [2008/03/03(月) 22:37:05 ] enumってプリプロセッサが解釈するのでしょうか??
258 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:41:16 ] いいえ。コンパイラたんがせっせこお仕事します。
259 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:41:58 ] >>258 サンクスでちゅ。
260 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:51:12 ] >>253 ありがとう。 CPUのやるとことまで押さえるのは難しいな。 もちろん仮想記憶で調べたりもしてるんですが、 なかなか自分の知りたいところのたどり着けない。 使い方はソースも含めて載ってたりするんだが。
261 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 00:31:23 ] >>260 そういうCPUまわりのことを色々知りたいなら、 www.intel.co.jp/jp/download/index.htm ここにあるIA-32なんとかなんとか下巻:システム・プログラミング・ガイドが参考になるかも
262 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:00:20 ] ちょっとお聞きしたいのですが stringクラスの関数でcompareというのがありますが、参考書によると int compare(const string& str) const; のように定義されているとあります。 この定義のconst string& の&ってどういう意味の&なんでしょうか? 最後のconstも、なぜここにconstがあるのか分かりません。 また、上の定義が宣言されている場所を探してみたのですが、そもそもそれが見つかりません。string.hの中にはないのでしょうか?? 質問ばかりで申し訳ないのですが、どなたか教えていただけると幸いです。
263 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:15:09 ] >>262 C++をもちっと勉強するといいよん。 &は参照。C++で導入された機能。参照についてはぐぐるよろし。 constは簡単に言うと「この関数はメンバ変数を変更しません」って宣言。 compare関数を呼ぶことで元の文字列を弄られちゃ話にならんだろ?
264 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:15:17 ] たぶん、これからも山ほど疑問が出てくるだろうから 入門書を読んだほうが早いと思う。
265 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:16:31 ] あと定義はstring.hではなくてstringの中だ。 string.hはCのヘッダーだからそりゃないだろうね。
266 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:19:45 ] >>262 > ちょっとお聞きしたいのですが > stringクラスの関数でcompareというのがありますが、参考書によると > > int compare(const string& str) const; > > のように定義されているとあります。 > この定義のconst string& の&ってどういう意味の&なんでしょうか? > 最後のconstも、なぜここにconstがあるのか分かりません。 > > また、上の定義が宣言されている場所を探してみたのですが、そもそもそれが見つかりません。string.hの中にはないのでしょうか?? > 質問ばかりで申し訳ないのですが、どなたか教えていただけると幸いです。 例えばcompare(const string str)だとすると引数にstd::string型のオブジェを入れると std::stringのコピーコンストラクタがstrに働いて無駄なメモリ間のコピーが働く compare(const string& str) とする理由は引数に参照を取る事となり コピーが働かないので無駄なメモリの消費がなくなる。 最後のconstはメンバ関数を呼び出したオブジェクトを修正できないようにすることです
267 名前:252 mailto:sage [2008/03/04(火) 01:45:56 ] レスくださった方々ありがとうございます。 >std::stringのコピーコンストラクタがstrに働いて無駄なメモリ間のコピーが働く >compare(const string& str) とする理由は引数に参照を取る事となり >コピーが働かないので無駄なメモリの消費がなくなる。 なるほど!勉強になります。 あと、compareの宣言ですが、stringやcstringの中も見てみたのですが、みつからないんです。
268 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:54:48 ] >>267 更にstringからインクルードしている先にあるんじゃないか? 例えばcygwinのgccだと/lib/gcc/i686-cygwin/3.4.4/include/c++/bits/basic_string.hにある。
269 名前:デフォルトの名無しさん [2008/03/04(火) 02:19:09 ] >>262 VSならソースコード中に#include <string>として stringの所にカーソルあわせて右クリックでstringを開くを選択すれば 中身は見れるよ
270 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 04:14:40 ] 適当なcompareのとこで右クリック→定義を参照すれば、basic_string::compare()かなにか出ると思うよ
271 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 04:15:02 ] あ、VSの話ね
272 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 04:30:57 ] たまにはBCBとかのことも思い出してね
273 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:34:19 ] grepくらい使えよ(´・ω・`)
274 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:37:41 ] findも使えよと混ぜ返したらDOSのfind.exeと誤解される罠。
275 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 08:46:55 ] プリプロセッサだけ通したモノにエディタで検索かけるのはダメですか…?
276 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 09:40:08 ] vector型で vector<int> num; num[i*j]=a; 見たいなことしたいのですが どうやるのでしょうか
277 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 09:48:22 ] templateで、特定の型以外が渡された場合にエラーなり 分岐なりする方法ってあるんでしょうか? たとえば template<class T> class Hoge { void Fuga(T &ref) { //ここで渡された型を知りたい }; } C++だと無理?
278 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:01:47 ] クラスAからそれぞれ派生したクラスB系統とクラスC系統のクラスがあるのですが Aのポインタ*pがどちらの系統か判別する方法はありますか? RTTIだとpの中身は分かるけどどういう系統までは追えないようですが良い方法はありますか?
279 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:04:16 ] 意味が良くわからんかったけどメンバに識別子でもいれればいいんじゃない
280 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:07:13 ] >>277 テンプレートの特殊化の話かな
281 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:08:10 ] >>278 dynamic_cast
282 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:08:45 ] >>279 デコレータパターンのConcreteComponentの型を判別する方法はないかな、ということです
283 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:10:30 ] >>278 dynamic_castはダウンキャストに失敗すると0を返す。
284 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:14:25 ] >>282 それ、パターンの使い方っていうか、設計ができてないんじゃないの? ja.wikipedia.org/wiki/%E3%83%AA%E3%82%B9%E3%82%B3%E3%83%95%E3%81%AE%E7%BD%AE%E6%8F%9B%E5%8E%9F%E5%89%87
285 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:19:42 ] >>276 operator[](size_type)があるやん
286 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:20:04 ] >>284 そうなんですけど 出来れば再帰的に DecoratorA-DecoratorB-DecoratorC-ConcreteComponent と順番に型情報をたどって行く必要ができてしまって・・・ 最悪でも、根元の情報だけでも何とかならないかと
287 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:22:42 ] じゃあまさに>>279 の方法なんじゃないの?
288 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:26:38 ] >>285 なんですかそれ
289 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:31:02 ] >>287 Decoratorの方はいくらでもいじれるのですが ConcreateComponentの方はこちらの一存ではいじれないので識別子を埋め込むのは難しいかと やはりcastの成否で判別していくのが無難か・・・ castに失敗するとNULLが返る? bad_castがthrowされるのは参照のキャストの時だっけ・・・
290 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:38:55 ] >>288 普通にnum[i * j] = aとすればいいということ。勿論、num.size()がi * jより大きいことが条件になるけど。
291 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:40:16 ] >>277 テンプレートで先ず全ての型で失敗するコードを書いておいて、 特別な型だけ特殊化しておくとか。
292 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:56:49 ] 全く関係ないが キャストとくにdynamic_castを使用する度に クラス設計に問題があったんじゃないかと不安な気分になるのは自分だけか?
293 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:58:43 ] >>292 それが正常。
294 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:03:25 ] 俺なんか気づいたら継承が全部public、メンバもほとんどpublicだったことがあるぜ! (´・ω・`)
295 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:32:26 ] でもcast使わざるをえない時ってあるから嫌らしいよな
296 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:36:08 ] >>280 ,291 すみません、説明がたりませんでした。 templateでtemplate型を受け取った時にも対応できる方法が あるかが知りたかったんです。 例えばtempate関数でstd::vector<何でもOK>は受け取れるが std::list<>はだめな場合など。 こういう場合、特殊化だとvector<int>、vector<float>〜という具合に OKにしたい型を全て記述しないとダメなんじゃないですか?
297 名前:291 mailto:sage [2008/03/04(火) 11:45:15 ] >>296 「特定の(少数の)型」だけ有効にしたいのかと思ったから特殊化を提示した。 そうでないんだったらtypeidで動的に型を調べることになるのかな? templateスレ辺りの方が喰い付きがいいかも知らん。
298 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:52:37 ] >>296 こんなの? #include <vector> template<typename T> void foo(T const& x); template<typename E> void foo(std::vector<E> const& x) {} int main() { std::vector<int> vi; std::vector<float> vf; foo(vi); foo(vf); return 0; }
299 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:00:49 ] concept check
300 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:07:36 ] >>296 mplを駆使すればできるだろ
301 名前:267 mailto:sage [2008/03/04(火) 13:06:56 ] grepは使ったのですが、なぜかうまく検索できなかったので困ってました。 Eclipse CDT 使ってるんですが同じようなことができました。 ありがとうございました。
302 名前:267 mailto:sage [2008/03/04(火) 13:07:28 ] grepは使ったのですが、なぜかうまく検索できなかったので困ってました。 Eclipse CDT 使ってるんですが同じようなことができました。 ありがとうございました。
303 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:18:46 ] [゚Д゚] castトキイテラグオルカラキマシタ, アイシテ!
304 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:21:32 ] 野郎銃器ロボはお帰りください。 野郎近接ロボとなおんロボはOK。
305 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:34:47 ] >>298 >template<typename E> void foo(std::vector<E> const& x) {} あーこういう書き方でいいんですね。助かりました。 いつかさらに複雑な選別が必要になったら、mplやconcept checkも 調べてみます。どうもでした。
306 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:49:30 ] ちょっとお尋ねした胃のですが void qsort(void* base, size_t n, size_t size, int(*fnc)(const void*, const void*)); という定義がありますが、const void* ってなんなのでしょうか? voidってのは「空の型」ってことだと思うのですが、空のものをconst(固定)するってどういうことなのでしょうか? 何もないのだから固定しようがないと思うのですが・・ また、引数がvoid*になっているのもよく分かりません。void(何もない)のポインタを引数にするってどういうことなのでしょうか??
307 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 14:51:16 ] void*は汎用ポインタ。voidとは関係ない。