[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 01/02 08:18 / Filesize : 209 KB / Number-of Response : 862
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C++相談室 part62



1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

384 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:37:29 ]
定義。

385 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:51:00 ]
クラス宣言って外部でメンバ関数の定義をしたりあと前方宣言
の時に使われる物?

386 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 08:26:28 ]
クラスそのものを後方定義というやり方にも使う。

387 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 09:26:57 ]
template<typename T> struct base{
 typename T::X test(){ return typename T::X(); }
};

struct A : base<A>{
 struct X{}
};

継承するクラスのテンプレートに継承するクラス自身を渡して、
継承するクラス内の型を基底型で使いたいのですが不可能でしょうか?

388 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 10:55:21 ]
>>387
全く問題ない。

389 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 11:27:40 ]
>>387
弾かれました


template<typename T> struct base{
 typename T::X test(){ return typename T::X(); } <-error C2039: 'X' : 'A' のメンバではありません。
};

struct A : base<A>{
 struct X{}
};

390 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 13:48:24 ]
struct X {};
struct A { void add( X* x ); };

X* x = new X;
A a;
a.add( x );

A のオブジェクトは A::add() で追加した X のオブジェクトを delete する義務があります。
この場合 A::add() が失敗して例外を投げるとき A::add() は x を delete するべきでしょうか?

普通、関数が例外を投げるときその関数が何もしなかったことにするのが理想だと思いますが
delete したほうが便利な場合も多いと思うのですが。

391 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 14:02:32 ]
すべきでないと思う
auto_ptrを使えばどうか

struct A{ void add(std::auto_ptr<X> x); };

std::auto_ptr<X> x(new X);
A a;
a.add(x);

392 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:30:13 ]
>>390
391に同意。
a.add(x)に渡すxはnewしないといけないという変な制約が発生してしまうから。



393 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:45:33 ]
boost の shared_ptr のコンストラクタや ptr_container の追加関数は
確か失敗したら delete される設計になってた。

394 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 02:56:30 ]
>>390
そのインターフェースなら a.add(new X) したくなりそうだから、 delete したほうがいいと思う。

395 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:01:08 ]
>>393
スマートポインタと一緒にしちゃだめでしょ。

>>394
X x;
a.add(&x)で落ちてもいいんだね。

396 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:08:30 ]
>>395
boost::ptr_vector

397 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:27:03 ]
C++で動く、フリーなライセンスの行列演算ライブラリはありませんか?

398 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:13:04 ]
boost


399 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:34:13 ]
boost::uBLASな

400 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:34:47 ]
boost::uBLASってパフォーマンスより安全性とかを優先してて遅いとか、
書かれてるけど、実際どうなん?

401 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:48:54 ]
boost::numeric::ublasは遅くないぞ
パフォーマンス表も書いてある

boost.cppll.jp/HEAD/libs/numeric/ublas/doc/overview.htm

402 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:02:54 ]
liboctaveより遅いけどな



403 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:07:56 ]
そうかもしれんがBlitz++のように途中で更新停止したり
するのが怖い
boostならまずそういう事はないだろうし

404 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:25:54 ]
確かに。メンテされ続ける安心ってのは大事だな。

405 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 01:56:56 ]
Program Optionsとか放置されてて酷いけどな。
一度使おうとして、あまりにも酷い出来で、ワイド文字対応がなってなかったんで、あきらめた。
内部的には全部マルチバイト文字にしてやがる。
そのため、ワイド文字でデフォルト値とか設定しようとするとコンパイルエラー。
少しいじって、utf16からutf8に変換するようにしてやれば動くが、
わざわざそんなことするぐらいなら、自前で書いたほうがいい。

ありゃ絶対に、一文字は絶対に一バイトで、しかも7bitに収まるって前提の南蛮人の書いたコードだ。

406 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 02:19:23 ]
progressbarは?

407 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 03:59:44 ]
>>401
ありがとうございました。
ありがとうございました。
ありがとうございました。

408 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 07:53:35 ]
>>395
> A のオブジェクトは A::add() で追加した X のオブジェクトを delete する義務があります。
これが前提じゃないのか? new してないものは最初から渡せないだろ。

409 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 08:08:55 ]
「渡せない」と「渡さない」の違い

410 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 09:33:28 ]
すみません。boost::numeric::ublasを教えていただいた者ですが、
vc8でdebugモードとreleaseモードで結果が異なり、debugモードでのみ正常に動作します。
使用しているboostは1.34ですが、これにはバグがあるんでしょうか?
面倒なのでアップデートしたくないのですが・・・。
boostコード中で警告4267と4244が出てくるのでboostが原因かもしれませんが把捉しかねる状態です。
ご教示願います。

411 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 10:59:43 ]
engineering.meta-comm.com/boost-regression/1_34_1/user/numeric-ublas_release.html

1.34.1で悪いけど。
結構厳しいね。

412 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 12:45:56 ]
>>397
俺はliboctave使ってたよ
もう遅いかもしれないけど…



413 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:07:42 ]
C++ 始めたばっかなんですが、
this はなんでポインタなんでしょうか
せっかく参照というものがあるのに...

そんで、今日は C++ のオブジェクトが自身への参照を
self という名前で持てるようにいろいろがんばってました。

具体的には、そのクラスを継承したらクラス定義の中で self が使えるようなクラスを作ろー...と思ってたんですが、うまくいかず。
結局
#define self (*this)
しか思いつきませんでした orz

こういうんじゃなくって、ちゃんと自分自身への参照をメンバ変数にもつオブジェクトは作れないのでしょうか。

414 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:18:51 ]
>>413
別の表記方法がないなら*thisでいいじゃん。表現に揺らぎがなくて結構なことじゃないか。同じものをいろんな名前で表現させるほうが混乱するんでないかい?
size length len count distance 同じ意味だったり違った忌みだったり混乱するね。

415 名前:デフォルトの名無しさん [2008/06/28(土) 21:25:04 ]
>>413
昔、this = malloc(1); てな構文があったんだよ

416 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:29:05 ]
>this はなんでポインタなんでしょうか
thisが C with Classes に導入されたときには参照はまだなかった

417 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:31:11 ]
JavaからC++への移行は推奨しません。

418 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:47:59 ]
selfってことはJavaじゃないと思う

419 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:50:43 ]
Object Pascalだね。


420 名前:デフォルトの名無しさん [2008/06/28(土) 21:51:42 ]
C++ではboostはデフォなのか?

421 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:51:52 ]
現代版#define BEGIN {ですね、わかります。

422 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:58:28 ]
>>420
一部はデフォになりつつある。

まあ、知って損はない。俺も最近使い始めた。今まで知らなくてずいぶん損したと思う。



423 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:59:31 ]
>>420
中にはそういう人間もいる(俺もその1人だがな)。
当然、すべての人間にとってそうとは限らない、いつだって使えるとは限らないから、
Boostデフォを妄信するのは危険。使えないときは反動でだるくなる。

424 名前:440 mailto:sage [2008/06/28(土) 22:49:03 ]
>442
勉強しておくよ。
GCとか便利そうだし

>443
仕事の場合だと、使えない場合が多そうだな。



425 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:50:24 ]
今テレビでターミネーター2やってるよね。
未来から来たって話。

426 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:59:36 ]
>>424
440基準でも未来レスかよw

427 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:01:52 ]
Testってクラス書くとして

Test.cppとTest.h用意?
Test.cxx作ってそこに全部記述?



428 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:02:56 ]
Testを他で使うなら.hも作っとけ

429 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:05:05 ]
Test.hppにテンプレートクラスでイナフ

430 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:11:42 ]
hppだとどういうコーディングルールがベスト?
サンプルないかな?

431 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:14:01 ]
boost

432 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:14:07 ]
>>426
意味不明だよ。




433 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:15:01 ]
IDテスト

434 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:16:10 ]
>>430
hppでの例
www.boost.org/doc/libs/1_35_0/boost/shared_array.hpp

ベストかどうかは・・・分からんけど。

435 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:17:05 ]
>>432

424 :440 [sage] :2008/06/28(土) 22:49:03
  >442
  勉強しておくよ。

436 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:18:40 ]
>>434
オペレータの定義だけ外だし?

437 名前:413 mailto:sage [2008/06/29(日) 04:39:41 ]
>>414
はっきりいってネタですw
でもthisが参照じゃないのは何でやろー && 参照だったら
Foo& Foo::operator=(const Foo& rhs) {
    this.bar = rhs.bar;
    return this;
}
こんな感じで(->)や(*)使わなくてすむのにと思ったので

>>415

kwsk

>>416
それじゃあ this が参照じゃないのは後方互換性のためなのか。
かつ *this があるから別の予約語を用意する必要もないと

>>419
ざっと見た感じでは self 使ってない雰囲気ですが

438 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:34:32 ]
google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Google社内でのコーディング規約らしい。例外は悪か、やっぱり。



439 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:55:16 ]
>>438
全部読んでないけど、「例外は悪」とは書いてないと思うよ。
Googleの場合はデメリットがメリットより大きいから使わないという話と思う。


440 名前:デフォルトの名無しさん [2008/06/29(日) 14:13:45 ]
C++0xがでたら、boostも用済みなんだろうか…というか組み込まれるのか?

最近C++の書籍がどんどん廃刊したり、改訂版が出ないのは、やはりC++0x
待ちなのかな?早くして欲しいもんだ。

441 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:16:53 ]
boostの一部は標準に取り込まれるが、
標準に新たな機能が追加されるわけで、
boostは更なる進化を遂げるだろう。

442 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:17:18 ]
coocle



443 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:03:01 ]
concept_map使った凶悪なライブラリがきっと入る、絶対入る

444 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:03:44 ]
使わない、って書いてあるけど、
標準ライブラリ等で例外が投げられる奴らはどう使ってるんだろう?
使ってないのか?
new も nothrow で使ってんのかね。

445 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:09:02 ]
catchしてNULL返す関数でラップしてるとか?

446 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:16:47 ]
>>438
> string tableName; // Bad - mixed case.
おいらは google で仕事はできない


447 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:19:09 ]
Googleに限らずどんな環境にも適合する人じゃないと駄目だよね。

448 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:19:53 ]
まあ、その辺は統一取れてりゃ合わせるよ。
よほど変なのでなければ。

449 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:20:16 ]
初心者もれに
string tableName; // Bad - mixed case.

なんでバッドなんだよって教えて干しいぉ?

450 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:24:31 ]
>>449
誰がBADだと言っているのかは知らんが、MixedCaseなのがいかんと言っているだけじゃないか。
要は、caseをmixするなってことだろ。

451 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:26:28 ]
変数名は全て小文字で。単語の区切りはアンダースコアで。
と書いてある。

452 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 16:28:25 ]
コーディング規約に違反しているから bad なだけ



453 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:01:58 ]
>>445
std::nothrowって知ってる?

454 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:05:12 ]
>>453
標準ライブラリが例外を投げないようにするのに、
どうやってstd::nothrowを使うのか教えてほしい。

455 名前:445 mailto:sage [2008/06/29(日) 17:08:18 ]
知りませんですた

456 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:34:59 ]
標準ライブラリから例外が投げられてもそのままキャッチしないで死ぬ
だけ、とか?
もしくは標準ライブラリも書き直して使っているとか。



457 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:40:28 ]
俺C++2年以上使ってるけど、例外処理ほとんどしたことない

458 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:50:04 ]
Cの癖が抜けてないんじゃね?

459 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:56:07 ]
まさにそれ…

460 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 17:57:11 ]
googleって例外使わないってことは
C++でも、全部defineかenum斬った値返すだけってこと?

461 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:04:01 ]
>>457
普段ほとんど気にしなくても、必要なときにキャッチするようにしておけば済むってのが強みだね。

462 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:08:41 ]
C++はマルチパラダイム言語でしかも多機能だけど、別に
それを全部使ってプログラムする必要はない。

むしろSTLも含めて常時全部の機能を使うのは大変。
その人に合ったコーディングスタイルでいいんじゃないかと
思う。



463 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:10:39 ]
>>462
ダメそれ無理

464 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:12:33 ]
>>463
え?全部の機能を常時使えって?
その方が無理でしょ
常に10冊ほどの本を隣に置いておかないといけなくなるよ

465 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:13:35 ]
より良い選択肢を無視するのは悪ではないか
けっきょく頑固な保守派はC言語をやれば良いではないか

466 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:14:40 ]
>>464
全部の機能を覚えてれば本置いとく必要なくね?

467 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:16:04 ]
>>464
学生じゃないなら20万ぐらいのドキュスキャン買って
本を全部PDF化するでしょ?

それで2画面で検索+コーディングするよね?
しない奴はカス

468 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:17:02 ]
ええっ
例えばSTLの関数名全部覚えられるか?
現在のC++のSTLは当初標準化に際して提出された文書の
サブセットだそうだがそれでも一冊の本が書けるほどだぞ

469 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:18:25 ]
例外大好きってわけじゃないけど、
RAIIしたら普通に例外に使わないか?
コンストラクタで例外出せないと、かなり面倒です・・・。

470 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:18:33 ]
関数名なんて覚える必要ないが、だいたいどういうことが出来るか
という全体像を掴んでいれば、その都度調べて使えるし、いつの間にか
覚える。

471 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:19:33 ]
>>462-464
よくわからんけど、話食い違ってるだけじゃね?

472 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:24:49 ]
std::locale とか std::codecvt とか一度も使ったことないや



473 名前:デフォルトの名無しさん [2008/06/29(日) 18:38:08 ]
>>468
んな必要ねーし
憶え方なんざ ISO/IEC14882 にだって書いてあるぞ

たかが few 万円の費用が壁になるようなアマチュアの道具ではないってだけさ

474 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:40:20 ]
few 万円で済めばいいが
俺はC++関連の本だけで既に百万は超えてる

475 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:45:14 ]
>>474
スゲェ俺一冊w

476 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:46:37 ]
一冊で済む奴はいいよな
俺頭悪いから、というかCの悪い癖を徹底的に取り除きたかった
からそれなりの出費を強いられたよ

477 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:50:37 ]
俺は入門書とD&Eで2冊だった。あとはweb。

478 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:51:15 ]
webって手もあるね。

479 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:51:55 ]
学校の図書館に散々リクエストしまくっている俺がいる。
卒業したらリクエスト出しづらくなるから、早く0xが出てくれないと困る。

480 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:54:06 ]
0xが2009年末くらいに出たとして、そこからそれに対応したコンパイラや
書籍が揃うまで、どのくらいかかるんだろうね。

481 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:55:03 ]
webも含めて、他人のソースを見るのは結構効果的だと思う。
オープンソース系や、STLとかboostとか。

482 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 18:55:57 ]
コンパイラの方はすぐだろ
書籍はそれから半年遅れてドバッと出てくるか

まあC++でほとんどのプログラミングテクニックは
出尽くしているから文法本しか買わないと思う



483 名前:デフォルトの名無しさん [2008/06/29(日) 20:16:51 ]
知り合いの達人プログラマーに
何から始めたらいい?って聞いたら
C++とロキやれって言われたけど

ロキってなに?

484 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:18:27 ]
Lokiは今更だなぁ。boostで良いと思うよ。






[ 続きを読む ] / [ 携帯版 ]

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

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