[表示 : 全て 最新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/

267 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 20:58:47 ]
>>266
イカですけど何か?

268 名前:デフォルトの名無しさん [2008/06/14(土) 20:59:26 ]
>>267
創価、すまんかった

269 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:11:26 ]
# include<iostream>

using namespace std;
void func(int a = 0,long int b = 1000, double c = 2.9751)
{
cout<<"This is func[i].\n";
cout<<"a="<<a<<", b="<<b<<", c="<<c<<"\n\n";
}

void func(int a,double b =3.4152)
{
cout<<"This is func[ii].\n";
cout<<"a="<<a<<", b="<<b<<"\n\n";
}

void func(long int a)
{
cout<<"This is func[iii].\n";
cout<<"a="<<a<<"\n\n";
}


int main(void)
{
func(0,1000,2.9751);
func(0,3.14152);
func(0);
return 0;
}
オーバーロード関数が呼び出せませんと言うエラーが出るのですが、
何処が間違えているかわかりませんか?
未熟な私に教えていただけたらありがたいです。

270 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:16:36 ]
そんな
かわいそうな
つかいかたを
するな

271 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:22:17 ]
>>269
どれを呼んでいいのかワカンネ。とコンパイラ様は仰っておられる


272 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 23:23:24 ]
>>269
とりあえず、2個目と3個目のfuncを関数ごと
コメントアウトして実行してみ。

273 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:27:52 ]
もう引数全部意図する型にキャストしちゃえよ

274 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:40:25 ]
既定引数と多重定義は「まぜるな危険」だろ。
危険といっても、だいたいコンパイルエラーか警告だけど。

必要なら既定引数を使わないで多重定義をがんばることもやる。
といってもこういうのはありにしているが。
void f(int x);
void f(double x);
void f(int x, int y, int z = 0);
//実引数1個なら多重定義の解決の候補に既定引数は関係しない。
//実引数2個ならデフォルト引数を使うがfの候補は1つに決まっているので良し。

275 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:02:24 ]
fcloseの定義はどこにあるのでしょうか?
glibc-2.7のソースの中には無いようなのですが…



276 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:07:07 ]
libio/stdio.h

277 名前:275 mailto:sage [2008/06/15(日) 03:16:44 ]
>>276
ありがとうございます!
あった!なるほど#defineされてたわけですね。
#define fclose(fp) _IO_new_fclose(fp)

で、_IO_new_fcloseをたどっていくと
最終的に__closeという関数が呼ばれているようなのですが、
今度こそ定義がglibcにはありませんでした。
ここから先はどうやって追えばよいのやら…

278 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:17:10 ]
>>275
マクロになってるとかじゃないの?

279 名前:275 mailto:sage [2008/06/15(日) 03:22:33 ]
すみません__closeありました。
sysdeps/march/hurd/close.c
にありました。

実は、fcloseするときにバッファをディスクに同期する
部分がどうなってるのかを追いたかったのですが、
__closeから先はどうやら単にクローズしているだけのようです。
追いなおします。

280 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:25:42 ]
>>277
それはシステムコールじゃないかね。
そうだと、カーネルのソースを見る必要がある。


281 名前:277 [2008/06/15(日) 13:41:18 ]
>>280
ありがとうございます。
Linuxのソースを見てみました。

linux/include/asm-i386/unistd.h
の中に

#define __NR_close 6

というのがあって、

linux/arch/i386/kernel/syscall_tables.S
の中のテーブルの6番の位置は

sys_close

となっていたので、sys_closeで探すと

linux/fs/open.c
の中にあって、その中で呼んでいる
filp_close
の中でflushとかやっていました。

ただ、__closeから__NR_closeのつながりがわかりませんでした。
これをどこかで#defineされているものなのでしょうか。

282 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:58:38 ]
C++のスレで話すような話題か、っつーのは置いといて...
今時のOSだと、ユーザアプリがファイルをcloseした
からといって、いちいちディスクに同期は取らんと思うけど。

libcのfclose()は、fflush()を呼ぶなりして、少なくとも
ユーザアプリ(というかlibc)が握ってるデータがkernel側に渡るようにはする。
が、kernel側がダーティページをどう処理するかは、バッファキャッシュ管理の
問題になるんでは。

ぶっちゃけsyncとかがあるのはそのためでしょ。

283 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:44:48 ]
class A { A(); ~A(); A(const A&); void operator=(const A&); friend class X; };
class X { class Impl; Impl* impl_; };

ユーザから見て A オブジェクトの生成と消去を X からしかできないようにしたいけど
impl_ の中で A を何らかのコンテナで管理するとき、そのコンテナは A と friend で
はないので A のコンストラクタとデストラクタを呼び出せません。A の中に実装のため
のクラスを friend として並べたくないし、実装の変更のたびに変更したくありません。

何か簡単に解決する方法はあるでしょうか?


284 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 23:10:00 ]
>>283
class A を class X か class X::Impl の private メンバにする。

285 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:39:28 ]
>>284
もちろんユーザは A の public メンバにアクセスできることが前提です。



286 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:57:47 ]
>>285
A を抽象インターフェースにして実体を >284

287 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:12:34 ]
template hackerさん。ヘルプミー。

template < class _T >
class C
 {
  public:
   template < class _Ta >
   void X();
 };

template < class _T >
void F()
{
C< int > obj1;
obj1.X<int>();

C< _T > obj2;
obj2.X<_T>();
}

288 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:13:57 ]
めっちゃ途中で書き込んだ。さーせん。
その上のコードの、obj2.X<_T>();がコンパイルエラーで通りません。
何ででしょうか
代替案とかあるでしょうか

289 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:21:27 ]
環境とエラーメッセージくらい書こうぜ

290 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:29:17 ]
ったりめーだろ
class _Tの実体がない

291 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:29:37 ]
じゃなかったclass _Tの定義がない

292 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:33:42 ]
>>286
ああ、その手があったね。

しかも A の唯一の派生クラスを A の friend にしておけば抽象である必要もないし
X の中に入れる必要もないね。

ありがとう。

293 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:34:00 ]
>>290
_Tはテンプレート引数だろ。

294 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:57:05 ]
>>288
obj2.template X<_T>();
その名がテンプレートであることを示せ

>>289
この場合はいらんかも


295 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:02:54 ]
>>294
>>287-288



296 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:21:21 ]
>>287 予約識別子死ね。

297 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:25:06 ]
>>292
> しかも A の唯一の派生クラスを A の friend にしておけば抽象である必要もないし
> X の中に入れる必要もないね。

何か変だな。一般的には、抽象でいいものに実装を混ぜる必要もないし、
スコープを無駄に広める必要もない、となりそうなもんなんだが。

まぁ望むものは得られたみたいなんで、書き込みに出てない部分の都合があっての
話ならどうでもいいけど。

298 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 07:38:23 ]
これでいいんだよね?

class A {
public:
 virtual ~A() { }
 virtual void Foo() = 0;
};

class X {
public:
 X();
 A* NewA();
private:
 class Impl* impl_;
};

class X::Impl {
public:
 A* NewA() {
  return new AImpl;
 }

private:
 class AImpl : public A {
 public:
  virtual void Foo();
 };
};

X::X() : impl_(new Impl) { }
A* X::NewA() { return impl_->NewA(); }

299 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:39:10 ]
>>297
抽象にしたくないのは単に性能のため。
Aは単純なクラスを想定しているのでそれほど実装を隠す必要はないから。
もしAの実装を隠したい場合はImpl方式にするかもしれない。
抽象クラスより優れている根拠は特にないが。

確かにAの派生はXに入れたほうが名前空間の汚染を軽減できるね。

>>298
デストラクタは private にしてユーザが削除できないようにしたい。
さらに特定のクラスにしか派生できないようにしほうが何となく安心。

300 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:47:35 ]
obj2.template X<_T>();

いや本当は知らないんですけどね

301 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:02:51 ]
>>294
>>300
thx。たすかりますた。thx。
>>287
解った。死ぬから_Tを使わせてくれ。

302 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:03:51 ]
> _T
処理系の予約語じゃねえか・・・

303 名前:デフォルトの名無しさん [2008/06/17(火) 21:38:29 ]
ワラタ

304 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:47:32 ]
class x について ++x と x++ を定義する場合
operator++ はどうなるのかしらぁぁぁぁぁぁぁぁ

305 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:53:14 ]
++x → operator++()
x++ → operator++(int)

後者の引数はオーバーロードのためのダミー引数で、
それ以外の何かに使う物ではない。



306 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:55:50 ]
X & X::operator ++ (void) ;
X X::operator ++ (int) ;

307 名前:304 mailto:sage [2008/06/17(火) 23:59:07 ]
ありがとうございました。orz

308 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:40:42 ]
関係無い話だけど、
テンプレート引数型で後置インクリメント使う馬鹿は氏ねと言いたい。

309 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:56:32 ]
いやむしろ型特性を利用して組み込み型のときだけ後置インクリメントにするという手も

310 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:14:00 ]
VC++ の2005を使用し、C++/CLIでアプリを作成しています。

ListViewに複数項目が登録されている場合、最下段での下キー押下で最上段へ、
また、最上段での上キー押下で最下段にフォーカスを移したいと思っています。

これをやるだけならキーイベントを拾って
「最下段で下キーが押された場合、フォーカス位置を0にする」
というようにすればいいのかと思ったのですが、ListViewのデフォルト機能(?)で
上下キー押下はフォーカス位置を1つずらすようになっています。

つまり、

1
2
3←フォーカス

この状態で下キーを押すと、フォーカス位置が0に戻る処理が実行された後、
フォーカス位置が1つ下にずれてしまうので

1
2←フォーカス
3

となってしまいました。

ListViewが持っているデフォルトのキーイベントを破棄できればいいのかと思ったのですが、
その捨て方も分かりませんでした・・・。

上記要件を満たす方法などがありますでしょうか?

311 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:39:20 ]
スレ違い
.NETスレ行け

312 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:39:59 ]
>>310
C++/CLIはC++を元にした別の独立した言語です。
なので基本的にはC++/CLIスレで質問して下さい。

しかし、言語自体でなく、
ListView(.NETコンポーネント)のことなので、
.NET総合スレか、人の多い(+構文が近い)C#スレをお勧めします。

System.Windows.Forms.ListView などは
C++/CLI, C#, VB.NETで同一のものです。

313 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:52:12 ]
次スレのテンプレには、
C++/CLI関連の誘導を加えた方がよさそうだな

314 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:25:33 ]
>>311、312
失礼しました
他スレにて再質問します
ありがとうございました

315 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:53:55 ]
以下のプログラムで、ddd() の中のようなキャストを行ってから bbb() の中で B::f() を正しく
呼び出せるでしょうか?

struct B { void f(); };
struct D : B {};
void bbb( B* b[], int size ) { for ( int i = 0; i < size; ++i ) b[i]->f(); }
void ddd( D* d[], int size ) { bbb( static_cast<B**>( static_cast<void*>( d ) ), size ); }



316 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 15:46:32 ]
ちょっと聞いてください。
enumハックを使ってクラスの中でSIZE_MAXという名前の定数を定義したんですよ。
そしたら、「error C2143: 構文エラー : '}' が '定数' の前にありません。」などのエラーが何個か出ました。
いろいろコメントアウトして原因を探ったら、vectorやstringなどをインクルードするとエラーが出る事がわかったんです。
で、インクルードファイルが壊れてると思い、再インストールしたんですが直らず、
結局、limits.hでSIZE_MAXという名前のマクロが定義されていたのが原因でした。
エラーメッセージに名前は出ないし、ネームスペースも無視される。
マクロって最低じゃないですか?

317 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 16:00:25 ]
マクロのない言語に乗り換えるといいと思うよ

318 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 20:39:42 ]
>>316
だからマクロは大文字を使うんだよ。

319 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:15:33 ]
やってみて結果を述べるのが自立した大人の行動と思う。

320 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:15:56 ]
319はto315

321 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:21:24 ]
だから、大文字の識別名はマクロ名以外には使わないという
お約束があるんだよ。

322 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:46:10 ]
>>319
すみません。特定の環境ということではなく一般的にできるかどうかです。
VC8で試したら動きます。

323 名前:デフォルトの名無しさん [2008/06/19(木) 22:37:03 ]
やってみた結果から刷り込まれた処理系依存な「知識」が豊富な「大人」は痛いよな

324 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:44:01 ]
>>318,321
列挙型や定数に大文字使ってるのよく見かけるけどそんなお約束あるの?

325 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:51:45 ]
>>324
定数もマクロだったりするし、列挙型はスコープ無いから定数の代わりに使ったりするから




326 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:29:25 ]
std::wstring以外で、汎用的な文字列クラスって言うと何になるんでしょうか。
今までずっとATL::CStringWでやっていたのですが、std::wstringはいまいち不便で。
boostあたりになっちゃうんでしょうかね。

327 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:49:29 ]
>>325
>定数もマクロだったりするし、
定数をマクロで書くのはよくないんじゃない?
Effective C++ 1項に書いてあるように、これこそお約束なのでは。

>列挙型はスコープ無いから定数の代わりに使ったりするから
>>316の例だって列挙型を定数がわりに使ってハマってるように見えるんだが、何か違う?


328 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:13:55 ]
怪しかったらundef
CreateWindowとか

329 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:35:20 ]
質問です。
あるクラスのインナークラスを他のファイルで前方宣言したいと思っているのですが
どのように宣言すればよいのでしょうか…。

以下例です。
名前空間SpaceAに定義されたクラスClassAがあったとして
ClassA内部にはInnerClassAが定義されているとします。

namespace SpaceA {
class ClassA {
public:
class InnerClassA{}
}
}

このInnerClassAを他のファイルClassB.hで前方宣言して使うことはできるのでしょうか…。

// 前方宣言
namespace SpaceA {
class ClassA;
//struct ClassA::InnerClassA; // ClassAは名前空間じゃないからエラー…どう書けばいいのか
}
using SpaceA::ClassA;

namespace SpaceB {
class ClassB {
public:
ClassB( InnerClassA* p ); // イメージ的にはこんな感じで使いたい
}
}

よろしくお願いします。

330 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:44:36 ]
>>315
D* を B* としてアクセスするのは、規格の 3.10 p15 にあるエイリアスの制約に
違反するので、未定義動作。

ddd() の引数に B* の配列を似たようなキャストしてねじ込んだ場合は、上記の
制約を満たすことになるのでセーフ。

331 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:48:50 ]
>>329
無理。外側の ClassA の定義が必要。 ClassA の中で class InnerClassA; としてあれば
InnerClassA の定義は必要ない。

332 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 08:20:45 ]
>>315
>D* を B* としてアクセスするのは、規格の 3.10 p15 にあるエイリアスの制約に
>違反するので、未定義動作。

普通のアップキャストだからOKじゃないの?

333 名前:332 mailto:sage [2008/06/20(金) 08:34:45 ]
332は>>315じゃなくて>>330だった。

なおModern C++ Designでは、
仮想継承でなければstatic_castによる
アップキャストは問題ないとなってた。
規格でどうなってるかは知らない。

334 名前:332 mailto:sage [2008/06/20(金) 09:16:06 ]
>>330

もしかして static_cast<B**> がダメってことですか?

335 名前:330 mailto:sage [2008/06/20(金) 09:30:49 ]
>>332
ごめん。まぎらわしいね。

「D* に B*& でアクセスするのは、〜」ってことで、少しは伝わりやすいかな、と。



336 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:36:27 ]
C++ の仕様では sizeof(B*) != sizeof(D*) の処理系もありえるのかな。

337 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:16:43 ]
クラスが違うとポインタサイズも違うのか・・・?なんという

338 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:08:14 ]
class XをSTL準拠にするため自作イテレータを作ろうと
operator++( X* x )みたくしたら
「クラス型パラメータがひとつもありません」と怒られました。
ハーバートシルト先生のSTL標準講座を読んでも解決法が書いてありません。
っていうか自作STLの書き方なんて載ってないし。
もうだめです。さようなら。

339 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:56:07 ]
はい、さようなら。

340 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:37:07 ]
using namespace std;という呪文が書いてある他人の作ったヘッダ(hoge.hh)をインクルードするのが気持ち悪かったので、

>hogehoge.hh
namespace hogehoge{
#include "hoge.hh"
};

>hogehoge.cc
#include "hogehoge.hh"
……

ってやったらhoge.hhの中でhogehoge::stdをさがしにいきやがったのが納得いかないんですが、
using namespace std;っていうのはstdをグローバルスコープにする命令じゃないんですか?

341 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:52:33 ]
違うよ。
現在の名前空間から見てstd::以下にあるシンボルを現在のスコープにロードする命令だよ。

ちなみに、名前空間のなかから普通の"std"を読み込みたいなら
using namespace ::std;
とする必要がある。

342 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:11:09 ]
>>338
ポインタで横着しようとしないで、イテレータ用のクラスを作る。

343 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:16:56 ]
>>340
hogehoge::stdを探しにいったってことは、
hoge.hh内に namespace std {...} があるのか・・・。

using namespace std;で飽き足らず、
std空間にユーザー定義を追加するとは、不届きなヘッダだなw

とりあえず、

>hogehoge.hh
namespace hogehoge {
namespace std { using namespace ::std; } // これを追加
#include "hoge.hh"
};

しておけばおk。

344 名前:343 mailto:sage [2008/06/20(金) 18:54:47 ]
あ、hoge.hhにstd系のincludeがあったら駄目か・・・。

345 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 19:01:52 ]
>>341
うむむ、namespaceは奥深いですね。

>>343
namespace stdは見つかりませんでした。。。
あと、その行を追加してもhogehoge::stdを探しに行ってるように見えます。。。

一番簡単なのはヘッダのusing namespace std;の行を削除することなんだろうけど、
ファイルの上の方のコメントみたらcopyrightとか書いてあるし……

諦めて裸のままインクルードして使うことにします。
ありがとうございました。



346 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:11:25 ]
>>344-345
hoge.hhの中にincludeがあるなら、
それを先にincludeしとけば良いんじゃね?
インクルードガードで無視されるから。
例えば #include <vector> があるなら↓のように。

#include <vector>
namespace hogehoge {
  namespace std { using namespace ::std; }
  #include "hoge.hh"
};

347 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:55:19 ]
定数を指定するとき、C言語では#defineを使いましたが、
C++ではconstな変数を使え、とモノの本に書いてありました

ところで、定数がint型で何個も欲しいのですが、
列挙型の列挙子で代用するのはアリでしょうか?

348 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:09:47 ]
>>347
どれくらいの個数かにもよるかもしれないけど、
列挙子で代用(?)している入門書は結構ある。

349 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:28:08 ]
#define 使うなってのは、型だとか副作用だとかエラーメッセージだとかだから
enum なら問題ないと思うよ

350 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:30:07 ]
配列の添え字に使いたかったんです
単なる数字より、文字のほうが読みやすいですし
ありがとうございました

351 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:34:33 ]
>>347
なんで数が増えたら enum で代用するなんてことになるの?
意味が違うだろ。

352 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:37:28 ]
連番なら enum だね。

353 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:46:05 ]
>>351
いや、0から始まる連番なもんで

354 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:50:15 ]
>>353
それなら代用じゃなくて enum が正解。逆に int const で用意するほうがありえない。

355 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 03:11:09 ]
すみません.
ここでする質問ではないかも知れませんが.
C++でMPEG2を取り扱うプログラムを作らなくてはならなくなりました.
MPEG2を扱うにはどのようなlibraryを使わなければならないでしょうか?
またそのマニュアルが詳しく掲載しているサイトを教えてくれません?
Directshowは抜きでお願いします.



356 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 03:25:18 ]
ffmpegでヤフれ

ただしMPEG2特許の利用ライセンスは自分でとってね!

357 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 16:44:37 ]
VC++環境です。STLのlistについて質問です。
あるlist(Aとする)の情報をまるまる別のlist(Bとする)にassign()で写したのち、
Aのある位置を指しているイテレータをそのままBで使いたい
(Aで指していた位置にある情報を指させたい)
のですが、方法を探しても見つかりません。
アルゴリズムのfind()以外で何か方法はありますか?

358 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:13:09 ]
>>357
std::distance(), std::advance()

ただ、listだとランダムアクセス出来ないから
一応それぞれO(n)で、セットでO(2n)になる。
まぁとんでもない要素数でない限り一瞬だろうけど。

359 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:18:01 ]
listはアクセスするだけでもメモリの中を不規則な順序で飛び飛びするので、平均の次の要素へのアクセス速度は
要素が連続しているvectorよりも遅い。

360 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:24:45 ]
>>357->>359
頭からの距離で考える発想は思いつきませんでした。
要素も少なく、実際に動かしてみても一瞬で処理できました。
ありがとうございました。

361 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:12:24 ]
解決したようだが、
begin()〜itとit〜end()の2回に分けてコピーするのもいいな。

362 名前:355 mailto:sage [2008/06/24(火) 02:37:33 ]
ffmpegをヤフりました.
MS-DOSで動くオープンソースの動画変換アプリなんですね.
ソースを見て参照方法を探れということですね?
これも方法の一つとしますが時間がかかるので,なにか他の方法はないでしょうか?

それと商用配布は考えていないのでライセンス申請の必要はありません.

363 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 03:12:10 ]
いいえ、商用に限らず許可なく使うことは許されません。

364 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 07:35:29 ]
特許権は、それを使ったものを製造、保管、流通することを制限することができるよ。
商用かどうかは関係ないよ。
詳しくは法務に聞こうね。

365 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 10:47:36 ]
>>362
> MS-DOSで動くオープンソースの動画変換アプリなんですね.
違います。

> ソースを見て参照方法を探れということですね?
違います。

> これも方法の一つとしますが時間がかかるので,なにか他の方法はないでしょうか?
規格書読むより時間掛かりませんよ。



366 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:10:28 ]
classのstaticメンバで、shortの配列があります。
例えば、
class hoge {
private:
 static array[100];
};
となっていて、arrayの中身を
for(int i=0; i<100; i++){
 array[i] = i*i;
}
のように初期化したいとします。
このよな作業はどの箇所で行えばいいでしょうか。

367 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:16:38 ]
>>366
クラスの外で一回やっておけばよい。
main()が呼ばれる前に初期化される保証がある。






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

前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