スレを勃てるまでもな ..
[2ch|▼Menu]
382:デフォルトの名無しさん
09/08/12 05:47:53
この話は明示的なメモリの解放を行うことができる言語がある限り繰り返されると思うよ
片手間で作ったちょっとしたツールでせっせと例外捕捉して必死でメモリ解放するとかやってられんしょ

383:デフォルトの名無しさん
09/08/12 09:44:43
>>374
その解釈はおかしい。
何故ならば、ch * 2が既にintだと言っているのだから(int)(ch * 2)は(int)(int)....(ch * 2)と言う位意味がない。
敢えてその顰に倣って書くのなら、(int)ch * 2と言った処だろう。

384:デフォルトの名無しさん
09/08/12 12:38:32
ていうかバイナリモードで開いてるのになんで文字としての数字が保存されてんの?
って聞きたかったんすけど・・・

385:デフォルトの名無しさん
09/08/12 12:40:27
>>384
std::cout << '0'としても、std::cout << 0としても出力が同じなのと同じ理由。
バイナリモードかどうかは全く関係ない。ついでに言えば、大抵のOSではテキストモードとバイナリモードの違いさえない。

386:デフォルトの名無しさん
09/08/12 12:45:57
テキストモードでオープンすると '\032' から先を読まない処理系が昔あったなあ。

387:デフォルトの名無しさん
09/08/12 16:59:09
class Hoge
{
operator double(){return 1.0;}
};
というクラスがあるとき

Hoge e;
printf("%f\n", e );

と言うコードはコンパイルが通りますが、表示されるのは1.0ではありませんでした
eは何型にキャストされてからprintfに渡されているんですか?

388:デフォルトの名無しさん
09/08/12 17:07:20
>>387
キャストされないで、Hogeのままスタックに詰まれる。
それみたいにメンバ変数のないクラスのでやるとどうなるかしらないけど。

389:デフォルトの名無しさん
09/08/12 17:10:58
正確には、もうひとつのインスタンスが
(コピーコンストラクタを使って)スタック上に作られる、ってことだね。

390:デフォルトの名無しさん
09/08/12 17:27:39
>>388-389
ということは、やりたいようなことはたぶん出来ないんですね
面倒でも(double)eとするしかないと

ありがとうございました

391:デフォルトの名無しさん
09/08/12 18:02:12
>>386
\032って何ですか?


392:デフォルトの名無しさん
09/08/12 18:14:04
>>391
Control-Z。MS-DOSやCP/MのEOF文字

CP/MというOSではファイルサイズを128の倍数でしか管理できなかったので、
データの最後にEOFをつける必要があった

393:デフォルトの名無しさん
09/08/12 18:29:35
>>384
じゃあ何が保存されればいいの?

394:デフォルトの名無しさん
09/08/12 19:00:57
>>392
ありがとうございます。

395:デフォルトの名無しさん
09/08/12 21:04:36
安西先生、引き数と返り値の型も隠蔽したいです


396:デフォルトの名無しさん
09/08/12 22:00:45
c++で2重起動を防止する方法を教えてください。
環境linux+gccです

397:デフォルトの名無しさん
09/08/12 22:18:02
セマフォを使う

398:デフォルトの名無しさん
09/08/13 01:43:06
mutex


399:デフォルトの名無しさん
09/08/13 22:13:12
class hoge {
public:
class foo {...};
foo fuga();
};

こんな場合って普通fooの定義は外にだすもん?


400:デフォルトの名無しさん
09/08/13 22:21:56
>>399
クラスのネストくらいふつーだと思う。

401:デフォルトの名無しさん
09/08/13 22:28:08
クラス内クラス定義はpimplイディオムなんかの時に普通につかうよ

402:デフォルトの名無しさん
09/08/13 22:30:13
>>401

403:デフォルトの名無しさん
09/08/13 22:45:43
>>399
そういうことをやり始めたあたりから楽しくなってくるんだぜ(笑)


404:デフォルトの名無しさん
09/08/13 23:10:16
前スレで登場したテンプレートを
適当に貼り付けてみる。
template<typename T, std::size_t N>
inline std::size_t numberof(T (&)[N]) {return N;}
まだまだ納得できない俺がいる。


405:デフォルトの名無しさん
09/08/13 23:15:13
URLリンク(ray.sakura.ne.jp)

これのバブルソートのテンプレート化も面白いな

406:デフォルトの名無しさん
09/08/13 23:35:31
>汎用性の為に速度が犠牲になつてしまふことは、なんとしても避けなければならない。
執念が感じられるな(笑)



407:デフォルトの名無しさん
09/08/13 23:37:24
メンテ性悪すぎワラタ

408:デフォルトの名無しさん
09/08/13 23:47:03
何かあったんだろうなw

409:デフォルトの名無しさん
09/08/14 00:10:52
C/C++で書くのは実行速度気にするからで間違った方向じゃないと思うがね
アセンブラやFORTRANでブイブイ云わせてるオッチャンは失笑するかもしれんけど

410:デフォルトの名無しさん
09/08/14 04:13:44
同じ関数にわたす引数が場面によって違う場合、どうするのが一般的ですか?

パターン1:
if( case == 1 )
test( a, c, d, e, f);
else
test( b, c, d, e, f );

パターン2:
if( case == 1 )
temp = a;
else
temp = b;
test( temp, c, d, e, f );


このどちらかでいいじゃん、と思われたかもしれませんが
パターン1の場合、引数リストが10行近くに渡る場合、
引数1つの違いのために10行余計に食うハメになります・・・

パターン2の場合は、1つの引数のためにわざわざ
tempを用いてるのが醜いです

引数リストの中でif文を使えるようなら、
それが一番いいイメージなのですが・・・

411:デフォルトの名無しさん
09/08/14 04:40:19
3項演算子でググれ

412:412
09/08/14 06:01:09
できました。ありがとうございます

413:デフォルトの名無しさん
09/08/14 09:17:37
>>412
自己完結乙。

414:デフォルトの名無しさん
09/08/14 17:24:44
privateなstaticメンバ変数と
無名名前空間内の変数ってどうちがうんでさ?


415:デフォルトの名無しさん
09/08/14 17:36:16
>>414
どういうソースのこと?

416:デフォルトの名無しさん
09/08/14 17:42:44
Cの勉強を始めたばかりなんだけど、メモ帳に、参考書にある通りのソースプログラムを書いてリターンキーを押しても実行結果が表示されません。
原因を教えてください。

417:デフォルトの名無しさん
09/08/14 17:45:13
>>416
釣り?マジ?

418:デフォルトの名無しさん
09/08/14 17:48:21
>>417
マジです。

419:デフォルトの名無しさん
09/08/14 17:53:50
俺は、ちゃんと実行されるけど、
不正コピーのWindows使ってるから、動かないのじゃね?

420:デフォルトの名無しさん
09/08/14 18:04:20
普通のXPを使ってます。
リターンキーを押しても改行されるだけなんですが(T_T)

421:デフォルトの名無しさん
09/08/14 18:08:58
その糞参考書を晒せ

422:デフォルトの名無しさん
09/08/14 18:14:42
これはたしかに参考書が気になる

423:デフォルトの名無しさん
09/08/14 18:20:25
以前もさらっと「コンパイルが必要です」ってある参考書ではまってた奴がいたような。

424:デフォルトの名無しさん
09/08/14 18:42:14
>>415
class pool {
private: static map m;
(ry
};

みたいなコード
これだと無名グローバル変数でもいいように思えるんだけど・・・


425:417
09/08/14 18:44:07
codepad
URLリンク(codepad.org)

ここで実行しろ。

426:415
09/08/14 18:44:58
>>424
poolの外からmにアクセス出来なくね?

427:デフォルトの名無しさん
09/08/14 18:57:08
『明解C言語 入門編』
です。
これって名著と聞いてますが。

428:デフォルトの名無しさん
09/08/14 19:06:43
良く売れてますよ。

でも、C言語の入門書でK&R第2版を超えるものはひとつもありません。
特にUNIXシステムインタフェースの章は重要で、
システム依存のコード(システムコールを用いるコード)とどのように折り合いをつけるか、
平易に説明してくれる入門書はこれくらいのものでしょう。
結局、C言語はアセンブラに近しいところで利用されるので
このような低水準の話題は避けて通れないのです。
でも日本人が書いた入門書はそのへん全部無視しやがってアホか。

429:デフォルトの名無しさん
09/08/14 19:17:12
>>428
ありがとうです。
K&Rの正式な書名をよかったら。書店で探してみます。

430:デフォルトの名無しさん
09/08/14 19:19:56
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン (著), D.M. リッチー (著), 石田 晴久 (翻訳)

431:デフォルトの名無しさん
09/08/14 19:34:26
>>430
ありがとうです。
明日さっそく書店へ行きます。

432:デフォルトの名無しさん
09/08/14 19:54:38
>>416
入力した c ソースをコンパイルして、実行ファイルを指定して実行していますか?
意味がわからなければ、さわりでコンパイルの方法が書いてある書籍をさがすか、人にきいてみてください。

433:デフォルトの名無しさん
09/08/14 19:55:53
>>431
最初の最初に読む書籍ではないことに注意してください。ある程度の経験が必要です。

434:デフォルトの名無しさん
09/08/14 20:13:44
最初の最初に読むのにいい本があったら教えて、誰かエロい人!

435:デフォルトの名無しさん
09/08/14 20:18:29
書籍スレへどうぞ。

436:デフォルトの名無しさん
09/08/14 20:18:39
もともとC言語を他の言語の経験なしに最初に学ぼうという時点で無謀だ。w
せいぜいテキストファイルを読み込んで集計する程度のプログラムしか書かないなら
C言語を使う理由など皆無に等しく、そんなものはBASICで十分だろう。

C言語は(BASICに比べれば)難解で保守しにくく、
それでもなおC言語を使うのはC言語には低水準固有のパワーが備わっているからだ。

そういうプログラムを書きたいと望むものが
K&Rの内容も読めないなら、
実際にプログラムをしようとしたとき、
C言語よりも遥かに難解なハードやOSを前にして
ただただ途方にくれるだけだろう。

437:デフォルトの名無しさん
09/08/14 20:19:09
入門レベルならWebでいいんじゃねぇの

438:デフォルトの名無しさん
09/08/14 20:28:47
BASICってVisualBasic?
Cより難解で複雑で混沌としてんじゃねーか

439:デフォルトの名無しさん
09/08/14 20:30:36
最初にC習って特に問題なかった俺は天才ということだな

440:デフォルトの名無しさん
09/08/14 20:44:06
>>439
俺もだ、天才同志よ。

441:デフォルトの名無しさん
09/08/14 20:45:19
C言語だとファイルの削除はremove(fileName)でできましたが、
C++だとどうやってファイルを削除しますか?

442:デフォルトの名無しさん
09/08/14 20:50:55
std::remove(fileName)

443:デフォルトの名無しさん
09/08/14 20:52:40
>>442
ありがとうございます。
チュ♥

444:デフォルトの名無しさん
09/08/14 21:13:13
STDMETHODってなんでしょうか?

445:デフォルトの名無しさん
09/08/14 21:23:40
COMで使われるマクロです

446:デフォルトの名無しさん
09/08/14 21:27:03
そんな用語はないよ?



447:デフォルトの名無しさん
09/08/14 21:31:45
俺も秀才なんで、Cから始めます。

448:デフォルトの名無しさん
09/08/14 22:12:18
俺おくてだから、勇気を出してCから始めます。

449:デフォルトの名無しさん
09/08/14 22:20:34
vecterとかmapのデフォルトコンストラクタってメモリ確保しないよね?

450:デフォルトの名無しさん
09/08/14 22:58:41
実装依存だから確実ではないけど、普通は確保しないよ。

451:デフォルトの名無しさん
09/08/15 00:08:57
stlportって何ですか?
ググってみると良いことずくめに書いてあるんですが。


452:デフォルトの名無しさん
09/08/15 00:33:47
演算子のオーバーロードを勉強中です。
コンパイルエラー出ます。本のサンプルプログラムなんですが。

a.c:17: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
string.h:21: note: candidate 1: char& String::operator[](size_t)
a.c:17: note: candidate 2: operator[](char*, int) <built-in>

です。原因は何でしょうか?エラーメッセージがよくわかりません。

もし、ソースコードが必要なら乗せます。

453:デフォルトの名無しさん
09/08/15 00:34:37
>>438が釣りなのかどうか判断つかん

454:デフォルトの名無しさん
09/08/15 08:02:56
>>452
必要に決まってるじゃん。
codepad
URLリンク(codepad.org)

ここで。

455:デフォルトの名無しさん
09/08/15 14:37:26
C++のサンプルコードが載ってるデザインパターンの本で良書あります?

456:デフォルトの名無しさん
09/08/15 15:43:32
>>451
VC6のころは必須だった。 今は別になくてもいい。

457:デフォルトの名無しさん
09/08/15 17:39:41
ゲーム内に存在するユニット(プレイヤー、モンスター、障害物など)にユニークIDを付けたいんだけど
アドレスをintにして返すだけの基底クラスを継承させれば問題ないかな?


458:デフォルトの名無しさん
09/08/15 17:48:24
アドレスをハッシュにするのはよくある手段だな
ポインタ型のサイズが変わったときにちょっとハマるかもしれんから
ハッシュ同士を==,!=で比較する以外の使い方をするときには注意が必要になるだろう
できれば専用の型でラップして使うべきだろうな

459:デフォルトの名無しさん
09/08/15 17:56:05
intptr_tなりUINT_PTRなりをtypedefしてxxx_IDとして用いれば大丈夫だろうね。

460:デフォルトの名無しさん
09/08/15 18:26:48
>>455
独習C++デザインパターンかなぁ。この手の本は殆どがJavaで書かれてるからC++の本は少ないな。

461:デフォルトの名無しさん
09/08/15 19:14:22
「Java謎+落とし穴」という書籍の中でC++はリフレクションが弱い、との記述があったのですがこれは事実でしょうか?
かなり古い本なので最近のC++のリフレクション周りについて知りたいです。
できればJava、C++、C#辺りのリフレクションの違いについて教えて頂けると有り難いです。
よろしくお願いします。

462:デフォルトの名無しさん
09/08/15 20:03:39
>>461
弱いどころか無いに等しいよ。
リフレクションが必要ならインタプリタ言語にまかせよう。

463:デフォルトの名無しさん
09/08/15 20:06:02
C/C++で、
 aa(), bb(), cc()
とした場合、この式の評価順序は
 aa()が最初で次がbb()で次がcc()
ということは仕様で保証されていますか?


関数の引数の評価順序は保証されていないということだそうで。

464:デフォルトの名無しさん
09/08/15 20:15:32
>>463
この場合はコンマ演算子だから、左から右へ評価されることは保障されており、かつ値は最後に評価したものですね。

465:463
09/08/15 20:53:28
>>464
ありがとうございます。
ではそれに依存してコーディングしていきたいと思います。

466:461
09/08/15 21:07:09
>>462
ありがとうございます。
クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか?
あるいはそういう需要があること自体、設計がおかしいという判断になるのかな

467:デフォルトの名無しさん
09/08/15 21:11:00
>>466
> クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか?
C++には継承と仮想関数がありますからそれをうまく使ってください。

> あるいはそういう需要があること自体、設計がおかしいという判断になるのかな
if(flag)
{hoge.foo();}
else
{hoge.bar();}
こんなことは良くやりますけど。

あとはC++には関数ポインタもありますねぇ。

468:デフォルトの名無しさん
09/08/15 21:21:59
場合分けはさすがに無いだろw
まぁJavaでもClassクラスなんて使うのは最終手段だし設計を見直すのが吉だろうな

469:デフォルトの名無しさん
09/08/15 21:36:03
>>466
ポリモーフィズムがあるんだから利用しない手はないだろ。
実行時に型を決定したいなんて結構あるんじゃないか?
それがあってるのかどうかは知らんが。

470:デフォルトの名無しさん
09/08/15 22:20:55
C++プログラミングの筋と定石 (新紀元社情報工学シリーズ)

この本を読むのじゃ。
お前様のほしい情報が載っておるぞ。
あたら高度だけど。

471:デフォルトの名無しさん
09/08/15 22:33:03
滅茶苦茶古い本だぞそれ

472:デフォルトの名無しさん
09/08/15 22:57:12
古いけどナイスガイ

473:デフォルトの名無しさん
09/08/15 22:58:16
宣伝は他でやれ

474:デフォルトの名無しさん
09/08/15 23:01:16
宣伝だと思うなら無視すればいいじゃない。
宣伝しなくても名著だからみんな知ってるだろうし。
MoreEffective C++でも推薦されてたくらいの本だから
もちろん、君も知ってるよね?

475:デフォルトの名無しさん
09/08/15 23:23:04
あぁ原書は有名だけど翻訳が糞過ぎて読む気無くなったなそれ

476:デフォルトの名無しさん
09/08/15 23:25:28
どう見ても宣伝だわw

477:デフォルトの名無しさん
09/08/16 19:02:57
Baseクラスと、Baseをpublic継承したDerivedクラスがあります。

Derived hoge;
void foo(const Base&);//1
void foo(const Derived&);//2

となっている時、
foo()//1にhogeを渡したいのですが、どうすればよいでしょうか?

foo(static_cast<Base>(hoge));
だと無駄なテンポラリオブジェクトができてしまいますか?



478:デフォルトの名無しさん
09/08/16 19:41:38
// 値型のキャストだとコピーになるが、参照型でキャストすればコピーは発生しない
foo(static_cast<Base&>(hoge));

479:477
09/08/16 20:00:14
>>478
ありがとうございます。

ということは
Derived hoge;

const Derived& hoge = ...
であった場合は
foo(static_cast< const Base& >(hoge));
であっていますか?

480:デフォルトの名無しさん
09/08/16 20:01:39
C++でもassertって使うの?

481:デフォルトの名無しさん
09/08/16 20:15:06
#include <iostream>
using namespace std;
class Base{};
class Derived : public Base {};

void foo(const Base&){cout << "Base" << endl;}
template<class T>
void foo(const T&){cout << "T" << endl;}

int main()
{
Derived hoge;
foo(hoge);
return 0;
}

これでTが表示されるのは、
基底クラスへキャストするよりもテンプレートの方が優先される
ためだと思いますが、
この動作はC++の仕様でしょうか?

482:デフォルトの名無しさん
09/08/16 20:37:48
>>480
使うよ。用途はCと一緒でしょ。

483:デフォルトの名無しさん
09/08/16 21:28:27
C++です。

ヘッダファイルに書かれた関数テンプレートを
どんなときにinline宣言すべきか分かりません。
明らかに短い時はinline宣言しますが、
どのあたりの長さからしない方がよくなるのでしょうか?

484:デフォルトの名無しさん
09/08/16 21:35:07
ほっとけばinline

485:483
09/08/16 21:38:31
>>484
ええと、ヘッダファイルに書かれた関数テンプレートでも
明示的にinlineと書かない限り
(コンパイラによる最適化以外では)
inlineにはならないと思っているのですが。


486:デフォルトの名無しさん
09/08/16 21:50:02
異なるcppファイルに同じヘッダを読み込んで、各々のオブジェクトファイルで実体化されたら
リンク時にカチ合うじゃないか。

487:デフォルトの名無しさん
09/08/16 21:51:34
>>485
Efficient C++(Effectiveじゃないよ)の9章と10章に載ってなる。
具体的には130ページに、行数(命令数か)と呼び出し頻度で決めなさいと書いてある。
あと、見た目のコード自体は短くても実際はそうでもないことがあるから注意な。

まあ、コンパイラの判断でインライン展開されるからinlineと書いたところで
必ずインラインになるとは限らんしな。

488:デフォルトの名無しさん
09/08/16 21:52:23
すみませんが構造体配列の初期化で全てを同じ値にしたいのですが上手くいきません
どこが間違っているのでしょうか?

struct Piece_t {
int Kind;
int State;
};

struct Piece_t Piece[(MAX_MASS + 2) * (MAX_MASS + 2)]={3,0};


489:デフォルトの名無しさん
09/08/16 22:01:08
初期値は必要な数だけ与えてやらんとだめ

struct Piece_t Piece[5] = { {3,0}, {3,0}, {3,0}, {3,0}, {3,0}, };

490:デフォルトの名無しさん
09/08/16 22:09:04
では要素数が可変の場合にはそれを上回る数を
あらかじめ用意するしかないのでしょうか?

491:デフォルトの名無しさん
09/08/16 22:14:24
forで回すなり、memsetするなりあるだろう。配列なら要素数も分かるだろ?

492:デフォルトの名無しさん
09/08/16 22:17:25
ああ…forで回せば良いのか…
疲れてたみたいです
アドバイス有難うございました

493:483
09/08/16 22:50:53
>>486
普通の関数ではそうですが、
関数テンプレートの場合はその限りではないと
記憶しています。



>>487
ありがとうございます。
Efficient C++は読んだこと無いので、
今度探ってみます。


494:デフォルトの名無しさん
09/08/17 00:31:52
いつもデバックなしで実行しているのですが、
リリースモードで実行するにはどうしたらいいですか?

495:デフォルトの名無しさん
09/08/17 00:35:43
まず、使っているコンパイラーを(ry

496:デフォルトの名無しさん
09/08/17 01:33:32
Intel C++コンパイラです。

497:デフォルトの名無しさん
09/08/17 10:20:38
>>496
使っているIDEのマニュアルでも読んでください。

498:デフォルトの名無しさん
09/08/17 11:07:11

if(flag_1)
return val_1;
else if(flag_2)
return val_2;
else if(flag_3)
return val_3;
これと
if(flag_1)
return val_1;
if(flag_2)
return val_2;
if(flag_3)
return val_3;
これはどちらが速いのでしょうか?

499:デフォルトの名無しさん
09/08/17 12:04:51
>>498
return文を使って関数から抜け出しているので、前者も後者も比較回数は同じになる。
また、return文を使って関数から抜け出しているので、前の条件が偽であるときしか後の条件を判断されないことになる。
よってelseを使う必要はない。
よって後者でおk。

ただ、速さが変わるかどうかは俺にはわかんね。

500:デフォルトの名無しさん
09/08/17 12:15:09
繰り返し文でその都度printfで結果を表示させたいのですが
古いほうから消えていきます。結果を全部残すにはどうすればいいですか

501:デフォルトの名無しさん
09/08/17 12:16:12
>>500
リダイレクトする。

502:デフォルトの名無しさん
09/08/17 12:28:15
>>498
少なくとも私は後者の方が速くタイプできました。

503:デフォルトの名無しさん
09/08/17 12:36:21
>>501
なるほど。それでググったら出来ました。ありがとうございます

504:498
09/08/17 12:45:18
>>499
ありがとうございます。

速さは・・・elseがない方がむしろ速いとか、
あった方が処理が分かりやすくて最適化しやすいとか
同一のasmに落ち着くから関係ないとか色々と考えられそうです。

ま、あまり気にしないのが正解なのでしょうか。

BoostやGCCの実装とかで同じような物があるかどうか探してみたいです。

505:デフォルトの名無しさん
09/08/17 13:32:44
>>504
こっちに似たような話があるから気になるなら参加したら?
【初心者歓迎】C/C++室 Ver.67【環境依存OK】
スレリンク(tech板)

506:504
09/08/17 14:21:07
>>505
みんな同じようなこと考えるんですね。
行ってみるかもしれません。
ありがとうございます。

507:デフォルトの名無しさん
09/08/17 14:43:09
えっ?

508:デフォルトの名無しさん
09/08/17 15:13:20
タイピングを楽にする為だけの#defineもtypedefにしたほうがいいのかな
テンプレートっぽいことができるのと#undefがある分有利な気がするんだけど


509:デフォルトの名無しさん
09/08/17 15:56:43
>>508
typedefに代えていけるならお薦め。

> テンプレートっぽいことができるのと
そりゃtypedefに代えていけないってことじゃん。

> #undefがある分有利な気がするんだけど
どうして?むしろ不利だろ?
typedefなら同名の物とかち合ったらコンパイルエラーになれる。


510:デフォルトの名無しさん
09/08/17 21:16:01
非同期ファイル読み書きには
Win32APIのCreateFileしか方法ないの?

511:デフォルトの名無しさん
09/08/17 21:20:56
スレッドを使ってみるとか

512:デフォルトの名無しさん
09/08/17 22:33:25
>>498
gccでコンパイルすると同じになったからどっちも同じ

513:デフォルトの名無しさん
09/08/19 09:21:13
C++でCGIをはじめました。POSTで日本語を受け取った場合URIエンコードされますがデコードのやり方が分からず困っています。
例えば あ であれば
%82%A0になりますが
どのようにすれば元の文字に戻せるのか
わかる方いましたらよろしくお願いします。
ソースを頂けたらなおありがたいです。

514:デフォルトの名無しさん
09/08/19 09:37:31
スレチな気もするが…
URLリンク(www.kinet.or.jp)

515:デフォルトの名無しさん
09/08/19 10:20:59
.lib+.hで提供されているライブラリをまとめて適当な名前空間に入れたいんですが
なにかいい方法はないでしょうか


516:デフォルトの名無しさん
09/08/19 11:26:18
>>515
.libだと真っ当な方法では無理。
せいぜいがDLLに隔離して新しいインターフェースを丸ごと書き直すぐらいかと。

517:デフォルトの名無しさん
09/08/19 12:10:07
514さん
大変参考になりました。
私もスレチかと思いましたがそれでも 教えて頂けて本当に感謝しております。ありがとうございました。

518:デフォルトの名無しさん
09/08/19 14:18:30
インターフェースに宣言されているメンバ関数をコンストラクタのように連鎖的に呼び出したい場合
スコープ解決して普通に呼び出しを繰り返すすほかになにかやり方はありますか?


519:デフォルトの名無しさん
09/08/19 16:37:47
>>518
具体的にどういうコードで問題になってるのかわからん。
インタフェースって抽象クラスのことか?

520:デフォルトの名無しさん
09/08/19 17:19:45
pthreadについて。

pthread_createで作成したスレッドを、スレッド外から終了させたいのだが。
名前的にはpthread_t指定してpthread_killぽいと思ったんだが、うまくいってないぽ...

どうすればいいの\(^o^)/

521:デフォルトの名無しさん
09/08/19 17:25:29
signal(pthread_killの第二引数)は何を指定した?
まさか0じゃないだろうな?
int pthread_cancel(pthread_t)じゃ駄目?

522:デフォルトの名無しさん
09/08/19 18:31:55
0さーせんwwwwww

cancelで終了した!
さんくす

523:デフォルトの名無しさん
09/08/19 20:17:23
ofsream.flush()でファイル出力時に
ディスクの容量オーバーの場合エラーにする事てできます?
例外がスローされずにフリーズしてしまいます…

524:デフォルトの名無しさん
09/08/19 20:22:21
>>523
OSなどの環境は?

525:デフォルトの名無しさん
09/08/19 21:40:41
>>524
すいません、linux + c++ + gcc です。

プログラムからシェルコマンドでディスク容量の結果とって調べる
とかは可能です?

526:デフォルトの名無しさん
09/08/19 22:27:51
>>523
ofstreamの bad()/fail()/good()あたりのメンバ関数で判断できるんじゃないかな。

527:デフォルトの名無しさん
09/08/19 22:43:20
APIを探してくるしかなさそうだな。

528:デフォルトの名無しさん
09/08/19 23:56:33
>>523
C++のストリームクラスで例外が投げられるようにするには、
予めメンバ関数exceptionsで例外を投げるよう指定する必要があるよ。

529:523
09/08/20 14:19:06
レスおそくなりすみません。
一応解決しました、ブロックが全て埋まりますが、
>>526のfail()で判定できました。
ありがとうございました。

530:デフォルトの名無しさん
09/08/20 18:46:59
メンバ関数の名前ってインスタンスが主語になるように名付けたほうがいいですか?

531:デフォルトの名無しさん
09/08/20 20:10:13
大抵そうじゃない?

532:デフォルトの名無しさん
09/08/20 20:18:46
>>530
is_invalid()
とかね。
むしろそうじゃないのってなに?


533:デフォルトの名無しさん
09/08/20 20:36:17
getter/setterとしてのgetName()は、
インスタンスを主語にするんなら、returnName()じゃね?

534:デフォルトの名無しさん
09/08/20 21:01:57
>>533
あーなるほど。


535:デフォルトの名無しさん
09/08/20 21:50:52
itsName()

536:デフォルトの名無しさん
09/08/20 23:50:26
>>533
インスタンスに対する命令語だから、Set / Get でいいのでは?
そうなるとこの場合、主語は無しだけど。

protected / private メンバ関数だと自動詞、
public メンバ関数だと他動詞になりやすくない?


537:デフォルトの名無しさん
09/08/20 23:58:53
>>536
命令だとしてもインスタンスに対してGetってのは
やっぱおかしくない?
ちなみに英語では命令文の主語は通例省略されるだけでありyouだ。

とりあえず標準C++で考えて見ると
C++文字列(std::string)
URLリンク(www.cppll.jp)
C++ ベクタ(std::vector)
URLリンク(www.cppll.jp)

例が悪い気がしてきた(笑)


538:デフォルトの名無しさん
09/08/21 00:17:06
イテレータが分からなかった時の
begin()とかend()とかの怖さといったら。

539:デフォルトの名無しさん
09/08/21 02:53:16
C++の設計について質問です。

たとえば、ゲームの当たり判定を計算する関数郡を内包した「当たり判定計算クラス」を作り、
その計算クラスを扱う「当たり判定制御クラス」を作ったとして、
当たり判定制御クラスに計算クラスのオブジェクトアドレスを渡す際に、
生成もすべて任せるべきでしょうか? それとも、生成はまた別のクラスで行い、その後に渡すべきですか?

どうも調べていると、「生成は別にすべき」とよく目にするのですが、
この場合、「計算クラス」を使うのは「制御クラス」以外にありえず、
いちいち別で生成するメリットが見出せません。

オブジェクトを生成するファクトリクラスなる概念が出てくるのですが、
これというのは自機や敵機という具体的なオブジェクト以外にも、
こういった計算クラスのオブジェクトの生成も担うべきなのでしょうか

540:デフォルトの名無しさん
09/08/21 03:17:07
>計算クラスのオブジェクトアドレスを渡す際に、生成
何を生成?

541:539
09/08/21 05:09:32
説明不足でした、すみません

CAtari* a; ←アドレスなので宣言の時点では生成されていない
a = new CAtari( 引数 ); // コンストラクタを呼び出してオブジェクト生成
↑これを、制御クラスで行うか、生成クラスを作って行うか?

制御クラスで行う場合、
CControlAtari* b;
b = new CControlAtari( a, 他引数 ); // コンストラクタに計算クラスオブジェクトを渡す
↑このようにして、bのコンストラクタでaの生成を行います
 aの解放もbのデストラクタで行います

542:デフォルトの名無しさん
09/08/21 08:58:05
特別な理由でもない限りオブジェクトファクトリー使う必要はないよ

ただ、newしてないポインタを渡すぐらいなら
呼び元でnewしたほうがいいのでは

543:デフォルトの名無しさん
09/08/21 09:03:57
どうしたらここで言ってることが理解できるようになりますか?

544:デフォルトの名無しさん
09/08/21 09:21:39
コードを沢山書いて、人のコードも沢山読んで、
んで頑張る。

545:デフォルトの名無しさん
09/08/21 09:43:44
当たり判定なんて座標渡して結果を受け取るだけでいいんじゃないのか?

546:デフォルトの名無しさん
09/08/21 12:32:25
private:int m_xがあるとして
get_x()よりpublic:const int& xのほうがクライアントコードも短いしいいんじゃないですか?


547:デフォルトの名無しさん
09/08/21 12:46:48
それするならpublic: int xでいいじゃない

548:デフォルトの名無しさん
09/08/21 12:57:07
>>546
const_castで値が変更できそうなのは見なかったことにしても
メモリの無駄じゃないかな

549:デフォルトの名無しさん
09/08/21 13:35:25
実行中に自身のクラス名(C++の)を取得する簡単な方法ってある?

550:デフォルトの名無しさん
09/08/21 13:39:28
typeid(*this).name()

551:デフォルトの名無しさん
09/08/21 13:41:00
template<int i> 〜〜
ここでi=1〜8までならコンパイル可能
それ以外だとエラー(できればメッセージつきで)
という具合にできますか?


552:549
09/08/21 13:50:47
>>550
ありがとう。

553:デフォルトの名無しさん
09/08/21 13:58:23
>>551
boost::mplとかテンプレートメタプログラミングとかBOOST_STATIC_ASSERTで検索。

554:デフォルトの名無しさん
09/08/21 14:16:09
>>551
#include <boost/mpl/int.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/comparison.hpp>

namespace mpl = boost::mpl;

template <int X>
struct S {
BOOST_MPL_ASSERT_MSG
((mpl::and_<
mpl::less_equal< mpl::int_<1>, mpl::int_<X> >,
mpl::greater_equal< mpl::int_<X>, mpl::int_<8> > >::value),
X_SHOULD_BE_GE_1_AND_LE_8, (mpl::int_<X>));
};

int main()
{
// S<9> s9;
// S<8> s8;
S<0> s0;
return 0;
}

ASSERT_MSGがそのものズバリですな
最後の引数に任意の型を放り込めるんで、
型タプル(?)と併用して複数の型を一括inspectとかお手のものです

555:デフォルトの名無しさん
09/08/21 15:18:43
テンプレートメタプログラミングって
本当に使える人って天才だと思うんだけど。

すごくね?
俺だったら気が狂いそう。


556:デフォルトの名無しさん
09/08/21 15:44:25
シングルトンって継承しない前提のものなの?


557:デフォルトの名無しさん
09/08/21 20:19:35
>>539
別にするべきって言うか、別にしないと当たり判定クラスが
何のクラスか分からなくなってくると思うよ。
当たり判定クラスしかオブジェクト持ってないと
たとえば、自キャラの入力受付とか、敵キャラの生成・死亡管理とかも
当たり判定クラスでやらざるを得なくなる。

558:デフォルトの名無しさん
09/08/21 20:31:02
>>557
え?
入力受付オブジェクトとか、敵キャラオブジェクトをどこかで持てばいいだけじゃないの?
当たり判定オブジェクトが入力受付オブジェクトとか、敵キャラオブジェクトを持つ意味ないでしょ?

559:557
09/08/21 20:49:28
あー、ごめん。完全に勘違いしてた。
自機、敵機のオブジェクトのことだと思ってた。

計算クラスと制御クラスの違いが良く分からん。
計算クラスは関数オブジェクトか何かか?
だとすれば計算クラスは別の生成で良いんじゃない?
計算クラスの関数そのモノを継承して処理方法かえれるし。
当たり判定による難易度調整もできるんでない?

560:デフォルトの名無しさん
09/08/21 21:17:01
メディエータにcreateHogeColleagueみたいなメソッドを作るべきかどうかってことなら
それよりファクトリクラスをほかに作って、そのインスタンスをメディエータにもたせればいいんじゃないかな

561:デフォルトの名無しさん
09/08/21 21:50:14
なるほど。生成を別にしとけば、処理のさし替えをする際に
生成クラスにだけ注目できるメリットがありますね

562:デフォルトの名無しさん
09/08/22 22:54:54
URLリンク(www1.axfc.net)

こういうことって安全なの?

563:デフォルトの名無しさん
09/08/22 23:05:55
大丈夫だよ。
#include っていうのは単にそこに文字列が展開されるだけだから

IntListクラスの宣言
IntListクラスの利用
IntListクラスの定義

っていう順番になってるだけ。

564:デフォルトの名無しさん
09/08/23 21:12:28
staticメンバ変数は静的メンバ変数と言いますが、
constメンバ変数は何メンバ変数と言えばよろしいでしょうか?


565:デフォルトの名無しさん
09/08/23 21:31:56
白米を指して麦の種類を聞いているみたいな

566:デフォルトの名無しさん
09/08/23 21:40:18
>>565


567:デフォルトの名無しさん
09/08/23 21:54:01
“変”数


568:デフォルトの名無しさん
09/08/23 22:41:21
変なの

569:デフォルトの名無しさん
09/08/24 00:25:11
仮に const を定数メンバ変数などと名前をつけたとして
では static const なメンバ変数はなんと呼べばいいのか。
それはつまり性的定子メンバであり
愛のコリーダである、と。

570:デフォルトの名無しさん
09/08/24 00:29:16
今作っているプログラムからffmpegを呼び出したいのですが
なんてググればいいですか?

571:デフォルトの名無しさん
09/08/24 00:32:29
system

572:デフォルトの名無しさん
09/08/24 01:10:51
どうもです

573:デフォルトの名無しさん
09/08/24 02:23:05
ShellExecuteEx()の方がいいだろ

574:デフォルトの名無しさん
09/08/24 02:37:30
なにその非標準関数。

575:デフォルトの名無しさん
09/08/24 06:52:17
>>573
すげー環境依存w
まあsystemも同じようなものか。

576:デフォルトの名無しさん
09/08/24 11:59:27
template<class T>
class C {
};

template<>
class C<int> {
void F() {
}
};

としたときC<int>::F()でint直記述ではなくTの値を使いたいのですが、方法はありますでしょうか?
よろしくお願いします

577:デフォルトの名無しさん
09/08/24 12:24:16
typedef int T;

578:デフォルトの名無しさん
09/08/24 14:23:34
特殊化しといてT使いたいとか意味がわからんですよ

579:デフォルトの名無しさん
09/08/24 14:37:37
興味のない方はすみません(スルーお願いします。)
新しくコンテストを来年開きたいと思っています
プログラマー(ゲーム・ツール・)の方は
スレリンク(tech板)l50
のスレに来てもらえるとうれしいです。
運営も募集しています。
↓のような感じでコンテストを開始する予定です。
URLリンク(219.113.110.143)


580:デフォルトの名無しさん
09/08/24 17:50:57
template<typename T>void F(){}
template<typename T>class C{template<>friend void F<T>();};
template<>class C<int>{template<typename T>friend void F();};

みたいな事したいって話?

581:デフォルトの名無しさん
09/08/24 19:31:36
クラスAのインスタンスの参照をもっているクラスBのインスタンスが複数あるとき
Aの寿命がすべてのBより長いことを保障したい
shared_ptr以外にいい方法はありますか


582:デフォルトの名無しさん
09/08/24 21:18:06
>>581
なぜshared_ptrじゃ不満なのだい?

583:デフォルトの名無しさん
09/08/24 22:06:32
>>578
複数箇所に同じ定数値を記述する手間を省きたかったので

>>580
目的としてはそれに近いですがfriendは使いたくないです


アクセスする方法はなさそうですね、ありがとうございました

584:デフォルトの名無しさん
09/08/25 18:00:06
32ビットマシンでコンパイルしたバイナリは16 64ビットマシンだと動かないんですか?

585:デフォルトの名無しさん
09/08/25 18:16:06
動くか動かないかは、コンパイルしたマシンで決まるわけではありません

586:デフォルトの名無しさん
09/08/25 21:53:02
>>581スタティックに保障したいということならば、構造化を考えればいい。
スコープの外側で宣言した変数の参照をスコープ内だけで使用するのであれば
寿命の関係はスコープの外側>スコープの内側になる。C++の参照はこれに則っている。




587:デフォルトの名無しさん
09/08/25 23:43:19
質問っす
double d;
〜dを使った計算〜
int i = (int)(d * 32767.0);
てな計算があったんですけどこれの意味わかる方いらっしゃらないでしょうか?
32767という数字からしてただのかけ算じゃない気がするのです。

588:デフォルトの名無しさん
09/08/25 23:50:06
URLリンク(www.google.co.jp)
でパッと眺めて使われているのはRAND_MAX関係での割り算と
あとは座標関係が多いようだが、さて。

589:デフォルトの名無しさん
09/08/25 23:52:49
>>587
その行だけ見たら「ただのかけ算」としか言いようがないぞ。


590:デフォルトの名無しさん
09/08/26 00:09:11
何かイデオムでもあるのかと思ったのですがそういう訳でもないみたいですね
もう少し自力で調べてみます

591:デフォルトの名無しさん
09/08/26 01:28:09
文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、変数aとcを使って、『db』と出力するプログラムを作成せよ




#include<iostream>
using namespace std;

int main() {

char a = 'b';
char c = 'd';

cout << "db" << '\n';

return 0;
}

この問題これじゃダメなんですか?

592:デフォルトの名無しさん
09/08/26 01:45:18
g++先生に聞いてみたら、
> db.cpp: In function ‘int main()’:
> db.cpp:6: warning: unused variable ‘a’
> db.cpp:7: warning: unused variable ‘c’

unusedだって。

593:デフォルトの名無しさん
09/08/26 09:25:46
>>591
#include <iostream>
int main()
{
char a = 'b';
char c = 'd';
std::cout << char(a + 2) << char(c - 2) << std::endl;
return 0;
}

594:デフォルトの名無しさん
09/08/26 10:58:16
>>591
つ[変数aとcを使って]

595:デフォルトの名無しさん
09/08/26 11:08:55
> 文字変数bに『c』という文字を代入
これが
> 文字変数cに『d』という文字を代入
の誤記として

#include<iostream>
using namespace std;

int main() {
char a
char c;

a = 'b';
c = 'd';

cout << "db" << '\n';

return 0;
}

とすればどうだろうか

596:デフォルトの名無しさん
09/08/26 11:52:14
>文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、
ふんふん。
>変数aとcを使って、
あれcどっから出てきてんねん。
>『db』と出力するプログラムを作成せよ
おいぃぃぃーーー!

という突っ込み待ち問題w

597:デフォルトの名無しさん
09/08/26 12:45:53
class foo{public:typedef shared_ptr<foo> sp;}

typedef shared_ptr<foo> spfoo;

どっちがいい?

598:デフォルトの名無しさん
09/08/26 18:39:31
namespace使おうぜ

599:デフォルトの名無しさん
09/08/26 19:37:45
namespaceとtypedefが関数内で使えるなんて
おじさん知らなかったよ

600:デフォルトの名無しさん
09/08/26 22:14:02
int main {
namespace A { enum U { a, b, c }; }
}

ってやったらエラーでたよ?

601:デフォルトの名無しさん
09/08/26 22:29:31
そりゃ出るだろ

602:デフォルトの名無しさん
09/08/26 22:33:50
>>599が「namespaceは関数内で使える」って言ってるのに
main関数内では使えないなんて!

603:デフォルトの名無しさん
09/08/26 23:48:29
>>595
ありがとうございます。つまり、>>594さんが言ってるのと合わせると、aとcっていうのを変数である、としてから、
作るって事なんでしょうか?

604:デフォルトの名無しさん
09/08/27 00:17:26
「何か質問してください」って泣いて頼むんだったら質問してやってもいいよ( ・ω・)y─┛〜〜

605:デフォルトの名無しさん
09/08/27 00:24:55
消えてください(´;ω;`)

606:デフォルトの名無しさん
09/08/27 00:58:12
関数の引数で要素数の分からない二次元配列を受け取るにはどうすればいいですか?
決まった要素数でなく、様々な要素数の二次元配列に対応させたいんですが

607:デフォルトの名無しさん
09/08/27 01:03:30
template<typename T,size_t T0,sizet T1>T func(T x[T0][T1]);

608:デフォルトの名無しさん
09/08/27 01:19:04
ごめんなさいCなんでテンプレートなしで

609:デフォルトの名無しさん
09/08/27 01:39:19
タスクシステムってようはコマンドパターンのリストみたいなもん?

610:デフォルトの名無しさん
09/08/27 02:27:50
配列とSTLリストについての質問です。

配列を配列のままアクセスする場合と、ポインタ型のリストに入れてアクセスする場合
かなりの差が出てしまうのでしょうか?


<具体例>
あるクラス Aがあるとします。
A a[1000]; //A型の配列a
list<A*> list; //Aのポインタ型リスト list

と配列とリストを作り、listには配列aを1000個すべて入れていきます。(順序は関係なく)
配列aとリストlistをそれぞれ始めから終わりまでアクセスする。






611:デフォルトの名無しさん
09/08/27 02:30:34
日本語が不十分でした。

かなりの差が出てしまうのでしょうか?

かなり速度において差が出てしまうのでしょうか?


追記:低スペックにおいての場合です。


612:デフォルトの名無しさん
09/08/27 03:40:15
実際にやってみて比較すればいいだけじゃん。

613:デフォルトの名無しさん
09/08/27 06:46:01
>>610
その単純な使い方なら、配列のほうが早いだろう。
しかし、実際に使うときは、使い方と処理方法により変わる。
いわゆる、適材適所だ。

614:デフォルトの名無しさん
09/08/27 11:47:43
>>606
せめて C FAQ くらい読もうか。
URLリンク(www.kouno.jp)

615:デフォルトの名無しさん
09/08/27 12:08:51
先に書き込まれていたでござる
typedef unsigned long int size_t;

#if __STDC_VERSION__ == 199901L
int do_something_array(size_t row, size_t column, int array[][column]) {
for ( size_t i = 0; i < row; ++i )
for ( size_t j = 0; j < column; ++j )
(void)array[i][j];
return 0;
}
#else
int do_something_array(size_t row, size_t column, void *array) {
int *ary = array; size_t i, j;
for ( i = 0; i < row; ++i )
for ( j = 0; j < column; ++j )
(void)ary[i*column + j];
return 0;
}
#endif /* __STDC_VERSION__ == 199901L */

#define numberof(a) (sizeof(a)/sizeof(a[0]))

int main(void) {
int array[][3] = {
{1, 2, 3},
{4, 5, 6}
};
do_something_array(numberof(array), numberof(array[0]), array);
return 0;
}
行数詰めたのでめちゃくちゃ見にくい

616:610
09/08/27 12:25:36
>>612
比較してみたのですが、かなりの差が出てしまい…
(iが1000ほどで 配列が1ms、リストが9msほど)
どこか間違いでもあるのかと疑っていましたので…


>>613
具体的には a[i].Exec などのように同じ処理をさせるのです。
配列、リスト、共に順序に意味など持たず
できるだけ処理速度(始めから最後まで)を重視したいと思っています。
また、頻繁にアクセスさせます(ゲームなので16msに一度程度)

このような単純な場合では配列の方が適切なのでしょうか?
for(int i=0;i<1000;){ a[i].Exec; }

617:デフォルトの名無しさん
09/08/27 12:29:28
>>616
本当はlistじゃなくてvectorを使うべきなんじゃないの?

618:610
09/08/27 12:59:54
>>617
Vectorも一度考えたのですが、まだ検証してみてはいません。
listで実装してしようと思った理由は、サンプルでそのような処理を行っていたためです。
(要素数の少ない処理でしたので差は体感できなかったのです)


>>610などの例では要素数が一定なのですが、
配列ではflagでExec()を実行するか否かを管理、リストでは実行するか否かを
EnableListとDisableList間で追加削除のやり取りをして、管理しています。
list<A*> EnableList; //実行したい配列のポインタのリスト
list<A*> DisableList; //実行したくない配列のポインタのリスト


Vectorが静的配列と同じくらいの処理速度でアクセスできれば
この処理について(追加削除などもあるので)適切だと思うのですが…
試していませんので分からない状態です。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5021日前に更新/231 KB
担当:undef