C++相談室 part54

このエントリーをはてなブックマークに追加
1v(^・^)v
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
C++相談室 part53
http://pc8.2ch.net/test/read.cgi/tech/1159340181/
2v(^・^)v:2006/10/30(月) 22:34:41
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
3v(^・^)v:2006/10/30(月) 22:35:03
4v(^・^)v:2006/10/30(月) 22:35:30
5v(^・^)v:2006/10/30(月) 22:35:50
6v(^・^)v:2006/10/30(月) 22:36:12
7v(^・^)v:2006/10/30(月) 22:36:32
8v(^・^)v:2006/10/30(月) 22:36:53
9v(^・^)v:2006/10/30(月) 22:37:13
10デフォルトの名無しさん:2006/10/30(月) 22:38:15
11デフォルトの名無しさん:2006/10/30(月) 22:43:36
>>1
もつかれd。
12デフォルトの名無しさん:2006/10/30(月) 22:45:43
Boostつかうと一気に実行ファイルサイズが100倍に?!
13デフォルトの名無しさん:2006/10/30(月) 22:53:45
>Boostつかうと一気にコンパイル時間が100倍に?!
環境によるだろ。
俺はVC++に /Yc オプションを指定して、極力
プリコンパイルヘッダを使用するようにして使っているが、例えばboost::lambdaを
使っても使わない時と比べ10秒ほどしか増えない。
14デフォルトの名無しさん:2006/10/30(月) 23:05:37
STLつかうと一気に実行ファイルサイズが10倍に?!
15デフォルトの名無しさん:2006/10/30(月) 23:08:52
>>12
あれ?こんなのあったっけ?
16デフォルトの名無しさん:2006/10/30(月) 23:12:16
>>15
ないね
17デフォルトの名無しさん:2006/10/30(月) 23:16:38
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
18デフォルトの名無しさん:2006/10/30(月) 23:17:47
#include <stdafx.h>
後死ね。
19デフォルトの名無しさん:2006/10/30(月) 23:18:31
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
20デフォルトの名無しさん:2006/10/30(月) 23:20:15
プリコンパイル済みヘッダ使っても
自作パーサとSpiritじゃマジでコンパイル時間100倍になるぜ。
21デフォルトの名無しさん:2006/10/30(月) 23:20:23
>>14
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
22デフォルトの名無しさん:2006/10/30(月) 23:32:40
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
23デフォルトの名無しさん:2006/10/30(月) 23:36:23
template<C++相談室>は>>50まで続きます



                〜しばらくおまちください〜
24デフォルトの名無しさん:2006/10/30(月) 23:52:44
任意のタイミングでファイルオープンとファイルクローズが出来るデバックツール探してます。
CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?
25デフォルトの名無しさん:2006/10/30(月) 23:56:44
>>24
スレ違い。意味が分からんからどこ行っても答えは得られないだろうが。
26デフォルトの名無しさん:2006/10/31(火) 00:24:29
>>24
メモ帳
27デフォルトの名無しさん:2006/10/31(火) 01:57:43
;゚д゚)<ここまでテンプレ
                     Σ(゚Д゚;エーッ!!
28デフォルトの名無しさん:2006/10/31(火) 02:14:54
アフロいきまーす
29デフォルトの名無しさん:2006/10/31(火) 02:34:57
クラステンプレートにストリーム演算子をオーバーロードさせることは不可能なんですか?
30デフォルトの名無しさん:2006/10/31(火) 02:37:48
>>29
それだけ聞くとできそうに思う。
何故不可能だと思ったのかね?
31デフォルトの名無しさん:2006/10/31(火) 02:37:55
>>29
環境による
32デフォルトの名無しさん:2006/10/31(火) 03:19:33
>>29
こういうやつのことか?

template <typename T>
class A { public: T v; };

template <typename T>
std::ostream& operator<<(std::ostream& os, const A<T>& v)
{ return os << v.v; }
33デフォルトの名無しさん:2006/10/31(火) 15:14:17
>>32
その通りです

>>31
GCCだと単純に>>32のように書くとコンパイルエラーになります
Tの型が未決定なためエラーになるようです

なんかうまい方法はないでしょうか
34デフォルトの名無しさん:2006/10/31(火) 15:49:09
>>33
gcc-3.3.6, gcc-3.4.6, gcc-4.0.3, gcc-4.1.1 on Linux でコンパイル通るぞ。
コードの別のところの問題だろう。

手元で通したコード全文はこれ。

#include <iostream>
#include <ostream>

(ここに >>32 を入れる)

int main(void)
{
 A<int> a;
 a.v = 1;
 std::cout << a << std::endl;
 return 0;
}
35デフォルトの名無しさん:2006/10/31(火) 18:25:41
29ができないようでは、std::basic_stringが入出力できなくなる。
逆に言うとできないわけがない。
36デフォルトの名無しさん:2006/10/31(火) 23:29:17
class A{
int a
int b
std::string str;
};

class B{
int a
int b
vector<double>v_fat;
};

class C{
int a;
int b;
map<std::string, int>num;
};

こんな似た様なメンバを持つクラスをJavaのArrayListみたいに
扱いたいときはどうするのですか?Objectクラスみたいなのを
作ってキャストすればOK?
37デフォルトの名無しさん:2006/10/31(火) 23:34:29
boost::variantとか、boost::anyとか、下のページのようにとか。
ttp://www.ksky.ne.jp/~seahorse/cpp/virtualbase.html

どれにしてもテンプレートを使って、1つの型に押し込んでいることには違いない。
38デフォルトの名無しさん:2006/11/01(水) 01:42:08
>>36
共通部分を基底クラスにくくりだし、その基底クラスへのポインタの配列を作ればいい。
必要に応じて dynamic_cast する。しないでいい設計のほうが好ましいんだけど。
39デフォルトの名無しさん:2006/11/01(水) 01:49:07
>>37
そこの FruitItem は

template <class T>
class FruitItem : public Fruit, T {
public:
FruitItem() {}
FruitItem(const T& y) : T(y) {}
const char* color() const { return T::color(); }
};

としたほうがよさそうだな。
40デフォルトの名無しさん:2006/11/01(水) 18:03:37
template <class Target, class Source>
Target lexical_castSource arg)
{
    std::stringstream interpreter;
    Target result;

    if (!(interpreter << arg) || !(interpreter >> result) || !(interpreter >> std::ws).eof()) {
        throw bad_lexical_cast();
    }

    return result;
}
Exceptional C++ Style で上のような記述を見かけたのですが、
>!(interpreter >> std::ws).eof()
の部分は何を行っているのでしょうか?
std::wsというのは初めて見ました
検索しても関係ないページがヒットしてしまい意味がつかめません・・・
41デフォルトの名無しさん:2006/11/01(水) 18:49:39
>>40
C++標準ライブラリ
§13.1.5 マニピュレータ

wsはistreamに適用して、空白を読み飛ばす
42デフォルトの名無しさん:2006/11/01(水) 20:45:37
本体はどこで入手できますか?買うのでしょうか?
43デフォルトの名無しさん:2006/11/01(水) 21:12:53
本体とは?
44デフォルトの名無しさん:2006/11/01(水) 21:37:20
45デフォルトの名無しさん:2006/11/01(水) 21:44:59
Visual C++とかの書き込む奴です
46デフォルトの名無しさん:2006/11/01(水) 22:28:24
スレ違い
47デフォルトの名無しさん:2006/11/01(水) 22:47:11
ちょっとした質問です。

namespace A
{
 struct X {};
 void *operator new (size_t n, X&) { return 0; }
 void f()
 {
  X c;
  new (c) int; // ←ここ
 }
}

"ここ"で(size_t n, X&)に適合する呼出が見つかりませんと言われてしまいます。
ネームスペースAからグローバルスペース?に移すと難なく通ります。
operator new (...)で呼び出すとネームスペースから外さなくてもエラーになりません。
仕様でしょうか?

ちなみにVS2003です。
48デフォルトの名無しさん:2006/11/02(木) 00:05:40
質問です。

//敵の生成時に一時的に入れる変数と、敵をまとめて管理する変数
EnemyObj*       enemy;
vector<EnemyObj*>  EnemyArr;

//敵の生成時に呼ばれる関数
enemy = new Enemy1(arg_x, arg_y);
EnemyArr.push_back(enemy);

このようにした場合、例えばこれで敵を三体生成したとして、
(EnemyArr[0], EnemyArr[1], EnemyArr[2])
この中から

delete EnemyArr[1];

としてもオブジェクトが破棄されないので困っています。
一番最後に生成した物(この場合EnemyArr[2])なら破棄できるみたいなのですが・・・。
一体どうしたらいいでしょう。
49デフォルトの名無しさん:2006/11/02(木) 00:19:22
>>48
本当か?もう一度よく考えてみろ。
50デフォルトの名無しさん:2006/11/02(木) 00:21:32
>>49
えっと、それはどういう意味でですか?
「破棄できないはずはない」のか、「根本的なミスをしている」のか
どっちの意味でしょう。
51デフォルトの名無しさん:2006/11/02(木) 00:22:12
逆に聞くけど、破棄されてない事はどうやって確かめてるの?
52デフォルトの名無しさん:2006/11/02(木) 00:28:04
>>51
オブジェクトが普通に表示されたり、
deleteする前の値(位置情報 xやyなど)
をそのまま持っているかどうかで確認しています。
53デフォルトの名無しさん:2006/11/02(木) 00:29:46
>>48
> enemy = new Enemy1(arg_x, arg_y);
> EnemyArr.push_back(enemy);
原因の予感。push_back(const T&)じゃなかったか。
ゆえに、push_back(new Enemy1(arg_x, arg_y))で試してみて。
54デフォルトの名無しさん:2006/11/02(木) 00:34:07
>>52
それって、破棄したオブジェクトをそのまま使ってるんじゃないか?
erase()でvectorの方も縮めておかないとだめだろ。
55デフォルトの名無しさん:2006/11/02(木) 00:34:33
>>52
deleteしたからって中のデータは直ぐに破壊されん。
そんなん何の参考にならんし確認にもなってない。
56デフォルトの名無しさん:2006/11/02(木) 00:36:15
まあコンテナにポインタだけを入れるのなら、boost::ptr_vectorの方が
使いやすいぞ。erase()したら自動的にdeleteしてくれるしな。
57デフォルトの名無しさん:2006/11/02(木) 00:42:11
ちょっと状態遷移にそって処理を行いたいのですが解らないことがあります。
各個別は古典的にstateパターンで処理可能なルールとして実装できると思いますが
文脈を管理するためのクラスはどのように実現するのが一般的なのでしょうか?
ルールはR0 = Aから始まるとします。

A = B | C
B = a b c
C = a | b c
a = ...
b = ...

StateパターンでR0の状態を処理する。
58デフォルトの名無しさん:2006/11/02(木) 00:42:59
deleteしてもそのポインタの指してる先が0でクリアされるわけじゃないから
ポインタが指してる部分に情報が残ってるだけでは?
デストラクタにstd::cout << "Delete Enemy" << std::endl;って行を入れて動作を確認してみて。
59デフォルトの名無しさん:2006/11/02(木) 00:44:19
>>57が何を言いたいのか全然わからない
60デフォルトの名無しさん:2006/11/02(木) 00:45:17
>>54,55
成る程、そういうことでしたか。
eraseする前に破棄されてるか確認したかったのですが、
それでは意味がないですね。

>>53
結局破棄されてないと勘違いしただけだったみたいですが、
その記述で一時的な変数が必要なくなって助かりました。

>>56
そういう便利なものもあるんですね。
ちょっと調べてみたいと思います。

>>58
成る程、デストラクタに入れておけば破棄された確認になりますね。
やってみます。
61デフォルトの名無しさん:2006/11/02(木) 00:50:43
自分で書いてて意味不明だな。
とりあえず、文法を解析するときに
個別のルールはStateパターンで処理したいけど
文脈はどうやって処理すればいいのか思いつかないから助けて
ほしいだけかもしれない
62デフォルトの名無しさん:2006/11/02(木) 00:53:03
vectorにポインタを入れておいて、deleteした後その要素を使いたく
ないなら、0を代入しておく方法もある。vectorコンテナは要素数が
大きくなると、eraseにO(N)かかるので高くつく。そこでdeleteした要素
には0を入れておき、後で必要になったらまず0の入っている要素を
再利用するという方法もある。

もちろんプログラム側で要素に0が入っていたら処理をスキップする
必要があるが。
63デフォルトの名無しさん:2006/11/02(木) 00:54:59
>>61
まずデザパタに頼らず強引に文法解析の骨子を書いてみたら。
その後でStateパターンでまとめると綺麗にまとまるというだけの話。
6453:2006/11/02(木) 00:56:07
>>60
ごめん俺が間違ってた。気にするな。
>EnemyObj*       enemy;
もちろんvirtualなデストラクタを持たせてるよね
65デフォルトの名無しさん:2006/11/02(木) 01:03:50
>>53
push_back(new ...) はあからさまに例外安全じゃないので考え直したほうがいい。
66デフォルトの名無しさん:2006/11/02(木) 01:20:55
>>58
破棄の確認が取れました。
ちゃんと破棄できていたようです。有難う御座います。

>>62
成る程、そういった利用方法もできるのですかぁ。
勉強になります。

>>64
持たせて破棄の確認をしました。
お騒がせしました。

>>65
それは
push_back(new ...)
にするより、元のコードのままの方がいいということですか?
67デフォルトの名無しさん:2006/11/02(木) 01:27:11
newが例外を投げる可能性があるからね。
コンテナに対する操作とは分離しておいた方がいいだろう。

それと、コンテナの要素にアクセスする方法が単なるラウンドロビン的な
方法のみで、ランダムアクセスをしないのであればstd::listの採用を考え
るのもよい。こちらはeraseしても反復子が無効にならない上、常にコストは
O(1)だから。
68デフォルトの名無しさん:2006/11/02(木) 01:27:12
>>47
new に対応する operator new はクラスのメンバとして宣言されたものか、
グローバルなものかのどちらかになる。 (5.3.4 9)
69デフォルトの名無しさん:2006/11/02(木) 01:28:15
>>67
問題は push_back() が例外を投げた場合なわけだが。
70デフォルトの名無しさん:2006/11/02(木) 01:29:52
>>66
元のコードも多分例外安全じゃない(いや、まcatchで適切にリソースの解体しているなら別だけど)

auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.get());
enemy.release();

だいたいこんな感じで書けば例外安全。
71デフォルトの名無しさん:2006/11/02(木) 01:32:33
>>70
ちょwwwwそれやり過ぎww
まあ業務用ソフトならそこまでするのかもしれんけど
72デフォルトの名無しさん:2006/11/02(木) 01:40:29
>>67,70
うーむ、まだまだ未熟で理解できない点がありますので、
これから習熟していく上で徐々に理解していきたいと思います。
有難う御座いました。
73デフォルトの名無しさん:2006/11/02(木) 01:42:36
>>70は別にやりすぎとは思わないな
これくらいがふつう
74デフォルトの名無しさん:2006/11/02(木) 01:45:22
だよな。
いつの日か、こんなのがリークの原因になってしまったとしたら、見つける自信が無い。
最初に書くときに安全を確保してしまうのが吉。
75デフォルトの名無しさん:2006/11/02(木) 01:47:45
>>70
これって、もしEnemyAryがptr_vectorだったら例外安全難しくない?
1.
auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.get());
enemy.release();
→enemy.release()が例外を投げるとptr_vectorとauto_ptrによる二重delete
2.
auto_ptr<Enemy>enemy(new Enemy(..));
EnemyAry.push_back(enemy.release());
→push_backが例外を投げるとリーク
76デフォルトの名無しさん:2006/11/02(木) 01:51:02
>>75
releaseは例外を投げなーい。
だから安心安心。
77デフォルトの名無しさん:2006/11/02(木) 01:58:46
>>75
prt_vector なら push_back(new ...) でいいだろ。 >>70 みたいな
コーディングを不要にするためのものなんだから。
78デフォルトの名無しさん:2006/11/02(木) 02:03:00
push_backが例外投げたらどうすんだよ!
79デフォルトの名無しさん:2006/11/02(木) 02:08:32
push_backって例外投げたっけ?
80デフォルトの名無しさん:2006/11/02(木) 02:08:38
>75
auto_ptr::release()は例外投げません……
81デフォルトの名無しさん:2006/11/02(木) 02:10:45
>>79
少なくともバッファが確保出来ないときは投げるんじゃない?
82デフォルトの名無しさん:2006/11/02(木) 02:11:44
>>79
配列の拡張時にメモリ確保失敗する可能性があるから投げると思うよ。
ちょっとソース見てくる。
8382:2006/11/02(木) 02:21:02
見てきた。
>>77のいうようにptr_*系は直接push_back呼び出して問題ない。
というか内部でauto_ptrつかって実質的に>>70と同じ処理をやってる。
だから、むしろauto_ptr使うと例外時に2重開放になるから使っちゃ駄目。

例外発生時にはpush_backは何もしないと思ってたので、
勝手に引数の開放するのは予想外だったのでちょっと驚き。

これからはptr_*系をちょくちょく使っていくか......
84デフォルトの名無しさん:2006/11/02(木) 02:23:11
うげ、勝手に引数の状態変えるのかよ・・・
85デフォルトの名無しさん:2006/11/02(木) 02:29:03
そういえば、失敗したときに勝手に delete するんなら Strong guarantee とは
言えないな。

あれー?
http://www.boost.org/libs/ptr_container/doc/ptr_sequence_adapter.html#modifiers
86デフォルトの名無しさん:2006/11/02(木) 02:49:00
質問なんですが、関数の実引数や仮引数に auto_ptr<> を頻繁に使うことってあるんでしょうか?
87デフォルトの名無しさん:2006/11/02(木) 02:53:46
>>86
new したオブジェクトの所有権が関数をまたいで頻繁に移動するならそうなるだろう。
88デフォルトの名無しさん:2006/11/02(木) 03:22:22
>>87

なるほど。忘れていました。そうですよね。所有権が移動するから使えるんですか。
ありがとうございます。
89デフォルトの名無しさん:2006/11/02(木) 03:23:08
そもそもauto_ptrって頻繁に使いますか??

使わんとは言わんが、結局目の届く範囲においとかないと怖くて仕方ないので
エラー処理とかでdeleteまとめんのが面倒くさいとかの時くらいしか出番ないですよ。
叩いて叩いて。
90デフォルトの名無しさん:2006/11/02(木) 03:31:52
リソースリークを防止する一番簡単な方法がauto_ptr
91デフォルトの名無しさん:2006/11/02(木) 03:43:15
自前でdeleteする手間とほとんど変わらん、便利よりも不便のが増えるで、
あればあったで構わないけど積極的な使用を推奨する気にはなれん代物でFA。
92デフォルトの名無しさん:2006/11/02(木) 03:46:02
>>89
new があるところに auto_ptr あり。少なくとも new と同じぐらい使う。
boost 使ってるときは、ほとんどそっちになるけど。
93デフォルトの名無しさん:2006/11/02(木) 03:46:45
>>91
auto_ptr で増える不便って何?
94デフォルトの名無しさん:2006/11/02(木) 04:00:22
>>91
手動deleteで例外安全確保しようと思ったらauto_ptrの100倍は面倒だろ
95デフォルトの名無しさん:2006/11/02(木) 04:08:20
例外安全性なんて知ったことじゃありまっせん!
96デフォルトの名無しさん:2006/11/02(木) 06:42:13
例外発生時点でそこから先計算不能な状態なんで書き込みリソースくらいしか例外安全に気を遣わない。
つか例外でたらabortせざるをえない。
97デフォルトの名無しさん:2006/11/02(木) 09:30:17
>>68
遅くなりました。
ネームスペースに入れるとクラスのメンバのような扱いになっているって事ですか??
もう少しヒントを・・・
98デフォルトの名無しさん:2006/11/02(木) 10:44:22
>>96
あー、よく聞くな。そのいいわけ。
99デフォルトの名無しさん:2006/11/02(木) 10:45:53
>>97
new を使ったときにメモリ確保に使われる operator new の決定方法は規格で
決められているわけだが、(以下 >>68
100デフォルトの名無しさん:2006/11/02(木) 12:17:19
>>96
始皇帝氏って奴?
101デフォルトの名無しさん:2006/11/02(木) 15:17:56
template<class T> class Test
{
vector<T> array;
public:
vector<class T>::iterator getBeginIterator()
{
return array.begin();
}
};

こんなクラスを作ったのですが
main関数で
Test<unsigned char> test1;
vector<unsigned char>::iterator itr = test1.getBeginIterator();
とすると
main.cpp(37) : error C2440: '初期化中' : 'std::vector<_Ty>::iterator' から 'std::vector<_Ty>::iterator' に変換できません。
というエラーがでます。
どなたか原因がわかりませんか?
102デフォルトの名無しさん:2006/11/02(木) 15:26:26
>vector<class T>::iterator getBeginIterator()
typename std::vector<T>::iterator getBeginIterator()
103デフォルトの名無しさん:2006/11/02(木) 15:27:00
>>101
Tというclassとclass Tという先行宣言の差。
vector<class T>をvector<T>にすれば多分大丈夫
104デフォルトの名無しさん:2006/11/02(木) 15:50:06
>>83
push_back前の状態にロールバックするのが強い例外保証だからそれでいいんだよ。ていうか開放しないとリークしちゃうし。

newの戻り値をどっかに保存してたりするならそれはユーザー側の使い方が間違い。

abortするしかないとか言ってるやつは例外機構をメモリリーク防止くらいにしか思ってないんだろうなぁ。
105デフォルトの名無しさん:2006/11/02(木) 16:05:08
リークを防ぐために例外発生時にも、
引数のオブジェクトの所有権を奪うという副作用を行っているんでしょ?
その副作用のロールバックが出来ていないと思うけど、俺の解釈の仕方が間違っている?

いや、ま、利便性考えればこの仕様が自然なんだけどね。
例外時にいちいち開放したくないし。
106デフォルトの名無しさん:2006/11/02(木) 16:09:58
いや、コンテナにポインタを入れるという行為そのものが所有権の委譲なんだよ。
107デフォルトの名無しさん:2006/11/02(木) 16:11:31
すまん。今のなしorz
108デフォルトの名無しさん:2006/11/02(木) 16:17:12
問題は開放しないことにしてしまうと今度は基本的保証がされなくなってしまうことだね。強い保証がされてるかどうかは考え方の問題な気がする。
109デフォルトの名無しさん:2006/11/02(木) 16:22:42
>>98
仮想記憶無い環境だとnewできない時はもうどうしようもねぇんだよ。
110デフォルトの名無しさん:2006/11/02(木) 16:28:14
根本的には、
所有権の移動と配列の拡張という別個の事象を、
一つの関数で行うから、起きる問題だな。

stackのpop,topみたいに綺麗に二つに分けれると良いんだけど、
そもそも二つをくっつける為のptr_vectorというジレンマ
111デフォルトの名無しさん:2006/11/02(木) 16:36:24
int x[3] = {3,5,1};
vector<int> a(&(x[0]), &(a[2]) + 1);
a.sort(not2(less<int>() ) ); //

関数アダプタ not2() を入れた場合、エラーはでないのですが、実行した場合に強制終了となってしまいます。
なぜ、強制終了してしますんでしょうか?
ソフトはVC++EEです。
112デフォルトの名無しさん:2006/11/02(木) 16:37:23
>>111
&(x[0]), &(a[2])+1
 
113デフォルトの名無しさん:2006/11/02(木) 17:00:17
>>112
a(&(x[0]), &(x[2]) + 1);

です。
114デフォルトの名無しさん:2006/11/02(木) 18:20:38
std::vectorのメンバ関数にsortなんてあったっけ?
115デフォルトの名無しさん:2006/11/02(木) 18:24:40
>>114
少なくともうちのVC8には無い。
int x[3] = {3,5,1};
vector<int> a(&(x[0]),&(x[2])+1);
sort(a.begin(),a.end(),not2(less<int>()));//

ちなみにこれなら普通に実行できたが。
どこのvector使ってるんだろう?
116デフォルトの名無しさん:2006/11/02(木) 18:43:31
失礼しました。
listです。
117デフォルトの名無しさん:2006/11/02(木) 19:38:09
>>116
もう信用できない。問題の発生するコードをコピペしろ。
118デフォルトの名無しさん:2006/11/02(木) 19:50:31
#include "stdafx.h"
#include <list>
#include <functional>
#include <iostream>
using namespace std;
template<class InputIterator> void Display(InputIterator first, InputIterator last){
for(InputIterator i = first; i != last; i++)cout << *i << " ";
}
template<class T> struct MyGreater : public binary_function<const T, const T, bool> {
bool operator() (const T &t1, const T &t2) const { return t1 > t2;}
};
void main(){
int a[8] = {5,8,4,2,41,6,9,7};
int b[14] = {9,9,4,2,1,0,5,6,7,1,1,1,1,1};
list<int> lst1(&(a[0]), &(a[7]) + 1);
list<int> lst2(&(b[0]), &(b[13]) + 1);
list<int>::iterator w = lst1.begin();
advance(w, 3); lst1.splice(w, lst2);
Display(lst1.begin(), lst1.end());//3
lst1.sort(); Display(lst1.begin(), lst1.end());//4
lst1.sort(not2(greater<int>() ) );//-------ココです
Display(lst1.begin(), lst1.end());//5
}
119デフォルトの名無しさん:2006/11/02(木) 20:08:02
>>118
試したらデバッグモードのチェックで "invalid operator<" と言われたが、
「強制終了してします」ってのはこれのことか?

not(greater<int>()) つまり <= は比較関数に要求される
strict weak ordering の要件を満たさないってこと。
120デフォルトの名無しさん:2006/11/02(木) 20:15:33
not2(greater_equal<int>()かless<int>()つかえって話だな。
121デフォルトの名無しさん:2006/11/02(木) 20:21:56
>>119
>>120

わかりました!
ありがとうございました。
122デフォルトの名無しさん:2006/11/03(金) 00:19:41
>>99
また遅くなってしまい、スイセン
理解しました。まさしく文章通りでしたね。
確かにnew ヘッダも定義はstdの外でやっていました。
これで納得して進めることが出来ます。どうも有難う御座いました。
123デフォルトの名無しさん:2006/11/03(金) 01:29:51
最近(というより数年前から)C++でもdoSomething()のような
Java風の命名を良く見かけるのですが、何か理由はあるのですか?
124デフォルトの名無しさん:2006/11/03(金) 01:31:10
>>123 名前付けた奴に聞けよ。
125デフォルトの名無しさん:2006/11/03(金) 01:41:46
>>123
バカは氏ね
126デフォルトの名無しさん:2006/11/03(金) 02:12:57
>>123
典型的なところで、XercesみたいにJava出身のライブラリは当然、Java風になるね。
127デフォルトの名無しさん:2006/11/03(金) 03:43:18
>>123
C++風の命名ってどういうものなんでしょう?
JavaからOOPL入ったので良くわかりません...
128デフォルトの名無しさん:2006/11/03(金) 03:48:05
C/C++
class_name
func_name
Java
ClassName
funcName
確かにJavaスタイルをよく見かける。このスレ(板)でも。
129デフォルトの名無しさん:2006/11/03(金) 04:20:34
それをC++風だとか、Java風とか分類するのがナンセンスなんだよ
130デフォルトの名無しさん:2006/11/03(金) 04:48:46
C/C++
fuck_cpp
Java
fuckJava

コーディングスタイルは他でやれよ
131デフォルトの名無しさん:2006/11/03(金) 05:14:52
確かに、最近WindowsAPI風の関数名をよく見るね
132デフォルトの名無しさん:2006/11/03(金) 05:21:23
それはDoSomething()
まあ、どうでもいいけどね
133101:2006/11/03(金) 09:24:27
>>102, >>103 サンクス。
>typename std::vector<T>::iterator getBeginIterator()
でいけました。
134デフォルトの名無しさん:2006/11/03(金) 09:34:13
仮の型指定のあるテンプレート前方宣言はどう宣言したらいいのでしょうか?
仮の型指定がない次のような場合は通るのですが
template < typename _T > class A; // 前方宣言
typedef A< int > B;
template < typename _T > class A // 定義
{
};

main( void )
{
B b;
}

以下のケースのように定義側に仮の型指定がある場合の前方宣言の仕方がわかりません。

template < typename _T = int > class A; // 前方宣言 無理 ERROR
// template < typename _T > class A; // 前方宣言 無理 ERROR
// template < > class A; // 前方宣言 無理 ERROR

typedef A< > B;
template < typename _T = int > class A // 定義
{
};

main( void )
{
B b;
}
135デフォルトの名無しさん:2006/11/03(金) 09:55:10
>>93
> auto_ptr で増える不便って何?

頭悪い子が付いていけない。
136デフォルトの名無しさん:2006/11/03(金) 10:37:34
templateの機能を1から学ぼうと思うとどれ読めばいいの?
Moden C++とか読むと書いてあることは解るけどなんでそんなこと
思いつくのよこの変態とか思うわけで....
137デフォルトの名無しさん:2006/11/03(金) 10:39:28
書いてあることが分かるなら一から学ぶ必要は無い。
138デフォルトの名無しさん:2006/11/03(金) 10:57:52
>>137
いやそれだと狭い知識しかみにつかんからもし
機能を体系的に勉強できるような資料があればうれしいのよ
139デフォルトの名無しさん:2006/11/03(金) 11:02:23
>>138
lisp, Haskell, etc,,
140デフォルトの名無しさん:2006/11/03(金) 11:07:13
>>136
機能を学ぶ以前に、想像力(or創造力)を鍛えた方が医院で内科医?
141デフォルトの名無しさん:2006/11/03(金) 11:16:17
>>136
もう読んでいるのかもしれないけど、
>>4のC++ Templates
142デフォルトの名無しさん:2006/11/03(金) 12:11:56
このtemplateが永遠にコンパイルできません。助けてください

template<int Depth, int A, typename B>
struct K17 {
static const int x =
K17<Depth+1, 0, K17<Depth,A,B> >::x
+ K17<Depth+1, 1, K17<Depth,A,B> >::x
+ K17<Depth+1, 2, K17<Depth,A,B> >::x
+ K17<Depth+1, 3, K17<Depth,A,B> >::x
+ K17<Depth+1, 4, K17<Depth,A,B> >::x;
};
template<int A, typename B>
struct K17<16,A,B> {
static const int x = 1;
};
static const int z = K17<0,0,int>::x;
143デフォルトの名無しさん:2006/11/03(金) 12:16:47
K17<Depth,A,B>の中にK17<Depth+1, 0, K17<Depth,A,B> >::x があると
その実体化にまたK17<Depth,A,B>が必要になるから
struct A{ A a;};と同じことになるんじゃね?
144デフォルトの名無しさん:2006/11/03(金) 12:16:58
内部構造がスッタクオーバーフローしましたとかいう
意味不明なエラーが出て困ってます。
145デフォルトの名無しさん:2006/11/03(金) 12:22:06
たった7600億回インスタンス化するだけでスタックオーバーフローするって
やっぱC++って腐りきってるよね、C#とかJAVAがいいんだろうな
146デフォルトの名無しさん:2006/11/03(金) 12:26:35
>>145
5^16≒1526億回じゃなかろか?
147デフォルトの名無しさん:2006/11/03(金) 12:31:40
>>135
そうなると C++ 自体が使えないね。
148デフォルトの名無しさん:2006/11/03(金) 13:44:38
どっかで見たことあるいぢめテンプレートだな〜
149デフォルトの名無しさん:2006/11/03(金) 15:36:24
素直に関数型言語使えばいいじゃん。
150デフォルトの名無しさん:2006/11/03(金) 15:47:27
つ elisp
151デフォルトの名無しさん:2006/11/03(金) 17:06:07
>>142
ふつうに再帰関数でもフリーズ。
関数の呼び出し回数が190734863281回にもなるから当たり前だけどな
152デフォルトの名無しさん:2006/11/03(金) 17:09:38
そこでgotoですよ
153デフォルトの名無しさん:2006/11/03(金) 17:42:50
まぁC++は使えない言語だと証明されてしまったってことか
154デフォルトの名無しさん:2006/11/03(金) 18:08:54
RUBYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
155デフォルトの名無しさん:2006/11/03(金) 18:49:53
お前らがC++を使えないの間違いだろ。
156デフォルトの名無しさん:2006/11/03(金) 21:43:30
はっきり言ってC++は使えるか使えないかは2極化しやすいよね。
157デフォルトの名無しさん:2006/11/03(金) 22:13:34
何?他の言語ならそんなに呼び出しても大丈夫なの?w
158デフォルトの名無しさん:2006/11/03(金) 22:16:10
>>156
まったくできず挫折する人。
深く理解して高度に使いこなす人。
そして第3の勢力… 俺C++ばっちりだぜ、と言いつつ実はベターCとしてしか使ってない人。
159デフォルトの名無しさん:2006/11/03(金) 22:17:30
iostreamのマニピュレータの実装ってどうなってるんですか?
160デフォルトの名無しさん:2006/11/03(金) 22:19:36
ソース嫁
161デフォルトの名無しさん:2006/11/03(金) 22:22:27
>>160
概略だけでいいので…
それに、すぐにソース読めというのもあまり教育的ではないでしょう…
162デフォルトの名無しさん:2006/11/03(金) 22:22:46
>>158
C++をBetter Cとして使うのってCでゴリゴリ書くより楽じゃね
163デフォルトの名無しさん:2006/11/03(金) 22:37:04
>>161 独習C++の 9.1 独自マニピュレータの作成 とか
164デフォルトの名無しさん:2006/11/03(金) 22:38:35
>>163
dクス。明日本屋で立ち読みしてくる
165デフォルトの名無しさん:2006/11/04(土) 00:08:14
ベターCする人ってCだとメモリ管理ガタガタうるさいけど
C++で一時オブジェクト作るからやめればっていわれるとファビョる
え?え?え?なんでなんで問題ないでしょそんなのえ?え?え?え
おいおい勝手に言うなよじゃあ証拠見せろとふぁびょります
JISのC++企画書をサルでも解る日本語でいうとふーんまぁレアケースだね
とかほざきます助けてくださいもう死にたい
166デフォルトの名無しさん:2006/11/04(土) 00:12:45
>>165
遠慮無く死んでください
167デフォルトの名無しさん:2006/11/04(土) 00:13:06
お前も十分ファビョってるよ。

日本語学んでから書き込んでね。
168デフォルトの名無しさん:2006/11/04(土) 00:30:16
ふぅ、今日は冷えるな。
残念ながら暖房は無しだ。
169デフォルトの名無しさん:2006/11/04(土) 00:34:46
>>134
遅レスだけど、それ解決方法ないはず、
C++の継ぎはぎ構文の負の遺産の一つ。
構文解析の問題で、出来なければならないのに出来ない事例を集めたサイトがどこかにあったはず。

C言語のスーパーセットとして登場して十数年、
言語の拡張という意味ではC++はもういっぱいいっぱいです。
170デフォルトの名無しさん:2006/11/04(土) 00:36:57
十数年どころじゃなかったわ。
歳をとるわけだ。
171デフォルトの名無しさん:2006/11/04(土) 00:46:17
>>169
甘い。まだtr1が待っている
172デフォルトの名無しさん:2006/11/04(土) 00:50:27
>>134,169
何を問題としているのかわからない。
宣言と定義の両方にデフォルト引数指定してるから、
再定義でエラーになるってだけじゃないの?
173デフォルトの名無しさん:2006/11/04(土) 00:59:11
boost::spritの作り方解説してるところないでしょうか?
自分であれを作ってみたい
174デフォルトの名無しさん:2006/11/04(土) 00:59:18
>>172
通常、定義はサードパーティーやら何やらのヘッダに書かれていて手をつけれない。
これを前提にした場合。
定義ヘッダ側に仮引数がないテンプレートクラスの先行宣言は通るけど、
定義ヘッダ側に仮引数がある場合は先行宣言そのものが出来ないってこと。
175デフォルトの名無しさん:2006/11/04(土) 01:04:53
>>173 sprit? 作る?
176デフォルトの名無しさん:2006/11/04(土) 01:08:41
>>174
あーそういうことか。
でかいテンプレートコンポーネントの前方宣言は <iosfwd> みたいに
実装者が提供しないといけないってことになるかな。
覚えておこう。
177デフォルトの名無しさん:2006/11/04(土) 01:11:27
boost::spiritだぉごめんお
178デフォルトの名無しさん:2006/11/04(土) 01:18:34
そうだなぁ、まず禿げてみたらどうだい?
179デフォルトの名無しさん:2006/11/04(土) 01:19:24
>>174
×定義ヘッダ
○定義

×仮引数
○デフォルト引数

×テンプレートクラス
○クラステンプレート

△先行宣言
○前方宣言

たて続けに気になったんで、な。
180デフォルトの名無しさん:2006/11/04(土) 01:20:33
>>173
使い方の解説ならあるんだろうけど、作り方はないだろうなぁ。
ソース読めば。
181デフォルトの名無しさん:2006/11/04(土) 02:25:11
forward declaration の訳語って、公式なものは無いの?
前方宣言のほうが先行宣言より正しいような気はする。
182デフォルトの名無しさん:2006/11/04(土) 03:23:05
http://www.bohyoh.com/CandCPP/FAQ/FAQ00057.html
free(*ptr); なのか
free(ptr); なのかどっちですか?
183デフォルトの名無しさん:2006/11/04(土) 03:24:46
>>182
free(*ptr) じゃコンパイル通らんだろ。 free(ptr) だな。
184デフォルトの名無しさん:2006/11/04(土) 13:06:30
じゃあ何故 free(*ptr) と書かれてるんですか?
ここのptrはint **なんでしょうか
185デフォルトの名無しさん:2006/11/04(土) 13:18:47
>>184
誤記だろう。
ptr は int* のはず。
186デフォルトの名無しさん:2006/11/04(土) 13:40:28
ptrはvoid************:だぉwwwwwwwwwwwwwwwwwwww
187デフォルトの名無しさん:2006/11/04(土) 14:20:54
188デフォルトの名無しさん:2006/11/04(土) 14:54:02
>>187
もういいよ

現場で使う言語がC++なんだから・・・
189デフォルトの名無しさん:2006/11/04(土) 15:14:22
オブジェクト指向なんて意味ないからね
190デフォルトの名無しさん:2006/11/04(土) 15:36:22
>>190げt
191デフォルトの名無しさん:2006/11/04(土) 15:50:19
C/C++プログラマの休日の過ごし方について教えてください。

起床時間:
就寝時間:
食事:
行動:
など
192デフォルトの名無しさん:2006/11/04(土) 15:56:17
>>191
仕様なら仕様らしく書いてください
そんなのじゃ仕事できまんせ
193デフォルトの名無しさん:2006/11/04(土) 16:06:14
>>190
正直に聞くが其れをゲットしてうれしいか?
194デフォルトの名無しさん:2006/11/04(土) 16:35:01
>>191
さーて今起きたことだし、コンビニで弁当かってC++FAQでも読みながらたべよ
195デフォルトの名無しさん:2006/11/04(土) 16:55:15
どれ、ドラフト行ってくるか・・・今日も欝だ死のう
196デフォルトの名無しさん:2006/11/04(土) 18:33:49
ふぅ、禿に向かってお祈りしないと
197デフォルトの名無しさん:2006/11/04(土) 19:15:20
今日もSFINAEがコンパイル通らなかったなぁ・・・
198デフォルトの名無しさん:2006/11/04(土) 19:22:04
禿に餌やってきた。茄子が好物のようだ。
頭のテカりも良くなってきているから凶から茄子をやろう。うへへ。
199デフォルトの名無しさん:2006/11/04(土) 19:23:00
>>198
ちょっ!、意味もなく笑っちまったぢゃないか!
200デフォルトの名無しさん:2006/11/04(土) 21:06:58
http://www.open-std.org/jtc1/sc22/wg21/
News 2006-11-04: The C++ Standard Library Issues List (Revision 45) is available
201デフォルトの名無しさん:2006/11/04(土) 22:48:26
>>129
いやJavaには推奨される命名規則あるだろ。
C++には無いからどんなの?と聞いただけで。
202デフォルトの名無しさん:2006/11/04(土) 22:49:40
>>201
無いんだよ。わかってるじゃないか。
203デフォルトの名無しさん:2006/11/04(土) 23:11:45
C++やってて思うんだ
言語仕様を覚えようと必死な俺だが、
C++は道具であって目的じゃない。と
204デフォルトの名無しさん:2006/11/04(土) 23:44:13
>>203
C++の言語仕様を完全に把握しようというのは、とても難しいよね。
自分がやりたいことを実現するために必要な範囲を覚えたら、道具としては十分使える。
それで足りなくなったらまた覚えればいい。

知識が足りないうちは、大丈夫だと分かっていることだけを使おうとしても
知らずにまずい書き方をすることもあるだろうけど、
ある程度のレベルに達すれば、自分が大丈夫だと分かる範囲の機能だけを
正しく使えるようになると思う。
205デフォルトの名無しさん:2006/11/04(土) 23:51:15
>>201
boostをまねておけばいい
STLの実装はまねちゃ駄目だぞ
206デフォルトの名無しさん:2006/11/05(日) 02:36:48
>>202
>>123にあるような、数年前以前はどうなってたの?
207デフォルトの名無しさん:2006/11/05(日) 03:05:20
>>206
数年前も十年前も今でも、 C++ で推奨される命名規則など無い。
そして標準ライブラリの命名規則はずっとある。

何か不満か?
208デフォルトの名無しさん:2006/11/05(日) 03:10:16
>>206
>>128のC/C++風がほとんどだったと思う
209デフォルトの名無しさん:2006/11/05(日) 03:11:56
>>206
C++ Coding Standards: 0項の一部を勝手に要約。
「一貫性のある規約を自分で定義し管理せよ」

まあ世の流行ってのはあるが、関連がないなら合わせる意味はない。
210デフォルトの名無しさん:2006/11/05(日) 03:14:34
というか最早命名規則でどーのと悩む時間すら惜しいわけで…
>>209の言うとおり馴れたのがあればそれが一番適当だと思うな
211デフォルトの名無しさん:2006/11/05(日) 10:48:49
そんなわけで取り合えずJavaのに合わせてる俺がいきなり全裸。
212デフォルトの名無しさん:2006/11/05(日) 10:50:58
書く時の「指先の理想」と、読む時の「目の理想」はまた別なのが奥深い。
書く上ではShiftキーを押すのがどうも「踏み切り前の一時停止」みたいで野暮ったいw
だからアンダーバーもちょっと抵抗あって、hoge-fugaみたいに書けるLispのやり方が好き。
でもそれは、読む際の事情はまた別なんだよな。
213デフォルトの名無しさん:2006/11/05(日) 11:01:42
>>212
つまり、ほんの僅かな手間を惜しんで事故の可能性を増大させるわけですな。
214デフォルトの名無しさん:2006/11/05(日) 12:24:37
>>213
君、ちょっと読めなさすぎ。
215デフォルトの名無しさん:2006/11/05(日) 12:47:12
hogeクラスとfooクラスがあったとして

class foo
{
hoge *A;
void test();
}

void foo::test()
{
// Aの中身は0x00000000のまま
A->hoge_func();
}

でA::hoge_funcのなかではグローバルなりソースか、hoge_func内で宣言した
関数内のローカルなリソースしか使っていなくて、hogeクラスのメンバは一切使ってない
のですが、これってA->hoge_func読んだ時点でnull参照で落ちるんですよね???

VC2005でコンパイルしたんですが、これでずっと動いてたのですが、
デバッグで動かしてもちゃんとA::hoge_funcのなかに飛ぶので、不思議なのです。。
これは実は落ちないものなんでしょうか?
216デフォルトの名無しさん:2006/11/05(日) 12:48:17
↑AはInitInstanceでNULLに初期化されていました
217デフォルトの名無しさん:2006/11/05(日) 12:58:06
>>215
コンパイル時にクラスhogeのメンバ関数hoge_funcは解決されるから呼び出せる、ってだけじゃね?
218デフォルトの名無しさん:2006/11/05(日) 13:15:47
メモリが足りなくて困ってます。
ただ同じことを繰り返してるだけなので、
試行が終わるたびにテキストで出力すればあとは手作業で済ませます。
どうすれば、試行の度に出力することができますか?
ファイル名をその度に変える必要があるんどえしょうか?
219デフォルトの名無しさん:2006/11/05(日) 13:19:47
>>215
hogeの定義次第じゃね?

>>218
スレ違い。
アップローダにソースを載せて、初心者スレ辺りで質問しなおせば誰かヒントをくれるかもしれない。
220デフォルトの名無しさん:2006/11/05(日) 13:21:04
>>219
ありがとうございます
221デフォルトの名無しさん:2006/11/05(日) 13:35:31
>>217
そういうものなんでしょうか。コンパイル時の解決関係で調べてみます。

>>219
hogeはCDialogの継承クラスなんですが、そういうのも関係してるのかなあとか。。
自分が作ったんじゃないんですが、たぶんダイアログをリソースエディタで作ったときに
当時VC6.0でクラスの追加メニューで作ったんだと思います。。
222デフォルトの名無しさん:2006/11/05(日) 13:40:33
>>221
それは非仮想メンバ関数が第一引数の前にthisポインタを渡す関数として実装されることが多いからで(ry
223デフォルトの名無しさん:2006/11/05(日) 13:58:56
>>222
す、すいません、よく理解できませんでした。。
第一引数の前にthisポインタを渡す関数
というのは、第一引数を渡す前に、thisポインタを渡すので暗黙のうちに場所がわかるということでしょうか?
それはメンバ関数内で別の自分と同じクラスのメンバ関数呼ぶときに、実体を指定せずに関数名だけで呼べるみたいな
ことでしょうか?
しかし今回hogeの実体は一度も作られていないので、thisポインタすら無いように思います
fooのほうは、実体はあるのですが。。
なんか間違ってるかもしれません
224デフォルトの名無しさん:2006/11/05(日) 14:06:21
>>223
A->hoge_func()がhoge_func(A)に変わるとしたら
thisに0入ってるんじゃねーの?
225デフォルトの名無しさん:2006/11/05(日) 14:13:49
ますます意味がわからなくなってきました。勉強不足でスイマセン。
今手元にソースがないので来週試してデバッグしてみます。。
226デフォルトの名無しさん:2006/11/05(日) 14:14:18
>>215
未定義動作。修正必須。
227デフォルトの名無しさん:2006/11/05(日) 14:23:53
未定義だけど、コンパイラのおかげ??で偶然動いてるんですね。。
とりあえずロジックとしてはおかしい?とおもうのでとにかく直しておきます。
ありがとうございます。
228デフォルトの名無しさん:2006/11/06(月) 08:29:45
strdupってcでもc++でもfreeしなきゃダメなんですか?
deleteじゃダメですか?
229デフォルトの名無しさん:2006/11/06(月) 08:42:37
使っているCランタイムライブラリのドキュメントを読め
230デフォルトの名無しさん:2006/11/06(月) 14:54:23
>>228
deleteはnewされたオブジェクトに対してのみ。
strdup()は内部的にmalloc()を呼び出しているので、free()を使う。
231デフォルトの名無しさん:2006/11/06(月) 15:54:54
vectorに多数のクラスを格納した場合、クラスの中のメンバ変数を検索する場合どうしたらよいのでしょうか?
232デフォルトの名無しさん:2006/11/06(月) 16:13:57
>>231
for_each()って事?
添え字がわかっているならoperator[]でアクセスできるけど
233デフォルトの名無しさん:2006/11/06(月) 16:17:03
関係ないけどメンバ変数が降順もしくは昇順にソートされているなら
lower_bound()も使える。
234デフォルトの名無しさん:2006/11/06(月) 16:41:44
>>231

template< class T, typename V > struct my_predicate
: public binary_function< T, V, bool > {
 bool operator()( T const & t, V v ) const {
  /* TODO:比較処理 */
 }
};

...

vector<T> vt;
vector<T>::iterator it = find_if( vt.begin(), vt.end(), bind2nd(my_predicate<T,int>(),1) );
235デフォルトの名無しさん:2006/11/06(月) 16:45:27
ある値を使いたいのですが、その値を1.2.5.10.20.50.100.200・・・・のように
出力したいのですがそのようなプログラムになるのでしょうか?よろしくお願いします。
236デフォルトの名無しさん:2006/11/06(月) 16:47:56
>>235
質問が抽象的すぎ
ある値がどこにあるのかとか。
それ以前に丸投げってやつは(ry
237デフォルトの名無しさん:2006/11/06(月) 16:53:08
>>235-236
たとえばある一次式のxの値に1.2.5.10.20.50.100.200・・・・と順にその答えを出したいのですが、
1.2.5.10.20.50.100.200・・・・をどうやって出力するのかってことかな?
238デフォルトの名無しさん:2006/11/06(月) 16:54:25
単に、数字をピリオドで区切っていくつも出力したいだけなのでは・・・
239デフォルトの名無しさん:2006/11/06(月) 17:06:33
順番に出力だとちょっと面倒だなぁ
240デフォルトの名無しさん:2006/11/06(月) 17:10:39
単に{1,2,5}の配列に*10しつづけながら出力するだけじゃないの?
241デフォルトの名無しさん:2006/11/06(月) 17:13:03
考え方はそれで良いと思うけど、プログラムにするとちょい面倒・・・
242デフォルトの名無しさん:2006/11/06(月) 17:15:24
それのどこが面倒なのか
243デフォルトの名無しさん:2006/11/06(月) 17:25:51
よくわからないけどこういうこと?

#include <stdio.h>

void main(void){
int x[] = {1, 2, 5};
int i;

for(i = 1; 1; i *= 10)
printf("%d.%d.%d.", x[0]*i, x[1]*i, x[2]*i);
}
244デフォルトの名無しさん:2006/11/06(月) 18:43:29
struct c
{
c(){cout << "c ctor" << endl ;}
//c( const c &obj ){cout << "c copy ctor" << endl ;}
~c(){cout << "c dtor" << endl ;}
} ;

c func( c obj )
{
cout << "func" << endl ;
return (obj) ;
}

func( c() ) ;
と実行すると
c ctor
func
c dtor
c dtor
c dtor

//をとってコピーコンストラクタを実装すると
c ctor
func
c copy ctor
c dtor
c dtor

コピーコンストラクタの定義の有無で
デストラクタの呼び出し回数が変わるものなのでしょうか?
245デフォルトの名無しさん:2006/11/06(月) 18:53:08
>>244
きちんとした実験結果があるのになぜ質問しているのか不明ですが、
現に変わってるでしょう?

なぜこういう動作になるかは、コピーコンストラクタがある場合と無い場合とで
引数(と戻り値)の受け渡しがどう変わるかを調べればわかると思います。
246デフォルトの名無しさん:2006/11/06(月) 19:00:08
for(;;) {
printf("%d.%d.%d.", x[0]*=10, x[1]*=10,x[2]*=10);
}
のほうがよくね?
247デフォルトの名無しさん:2006/11/06(月) 19:48:05
>>244
コンパイラはコピーを最適化して除去できるので
変わっても不思議ではない。実際、GCCではどちらも2回だった
248デフォルトの名無しさん:2006/11/06(月) 21:10:23
C++関係のサイトをみていると
"Move Semantics"
という単語がでてくるんですが、コレは
std::auto_ptrの様にオブジェクトの所有権が移動する
事を指している
という認識でいいんですか?
249デフォルトの名無しさん:2006/11/06(月) 21:13:57
>>248
文脈にもよるけど、たぶんC++0xの機能のこと。
その機能の目的はauto_ptrのような所有権の移動を楽に記述するような機能と思えば大体OK
250デフォルトの名無しさん:2006/11/06(月) 21:25:54
>>249
ありがとうございます。
具体的にどういう仕組みかわからないので、ググってきます
251デフォルトの名無しさん:2006/11/06(月) 22:32:39
>>244
それ、コンパイラ何使ってる?
コピーコンストラクタをユーザー定義するかどうかで
一時オブジェクトの有無が変わる理由がわからん。
252244:2006/11/07(火) 01:04:15
>>245
変わってるんですが、なぜかわからなかったもので。
引数と戻り値の受け渡し時のコピーがらみかなとも思ったんですが
調べてもわからなかったもんで。

デストラクタが3回呼ばれるのが謎で
コピーコンストラクタの呼び出しをチェックしようとしたら
デストラクタが2回しか呼ばれなくなってわからなくなりました…

>>247
 GCCではどちらも2回なんですね。コンパイラ依存?

 VS2005 C++を使ってるんですが、デバッグ用なので
 最適化オプションは無効になってますが、
 その最適化とは違うことだとすると
 ユーザ定義のコピーコンストラクタがない場合のみ
 一時オブジェクトが2個作られてるって事でしょうか。調べてみます。

>>251
 VS2005 C++です。
 私もその理由がわからなくて悩んでます。
 >>247 の最適化による除去が濃厚そうですね。
253デフォルトの名無しさん:2006/11/07(火) 01:23:19
A := B | C | D
B = a | bc

みたなBNFをtemplate使って書いてみたいんですけどどうやって書けばいいの?
254デフォルトの名無しさん:2006/11/07(火) 01:45:09
一体全体どこにtemplateを使うって?
255デフォルトの名無しさん:2006/11/07(火) 02:04:10
>>253
つ[Boost.Spirit]
256デフォルトの名無しさん:2006/11/07(火) 02:04:34
>>251
ユーザー定義のデストラクタはあり、
ユーザー定義のコピーコンストラクタはない
バランスが取れてないのでVC++は除去しないと見た
ベンダに聞かないと分からんけどなw
257デフォルトの名無しさん:2006/11/07(火) 02:18:36
std::map<std::string, A *> m;
っていうコンテナ作りました。

これだと、Aを丸々コピーしなくても問題ないですよね?

あと格納したオブジェクトをoperator()を実装して呼び出せば
関数呼び出しのコストはかからないですよね?
258デフォルトの名無しさん:2006/11/07(火) 02:29:13
>>257
sizeof(A *)のコピーしか無いだろうが、ポインタの参照先については責任を持たなきゃならんな。


>あと格納したオブジェクトをoperator()を実装して呼び出せば
A::operator () () であろうが、void A::func()であろうが、所詮は同じ「関数」。
259デフォルトの名無しさん:2006/11/07(火) 10:02:19
>>253
ttp://p-stade.sourceforge.net/biscuit/index.html

typedef seq<
 chseq<'/','*'>,
 star_until< any, chseq<'*','/'> >
> c_comment;

std::string text("/* Hello, Biscuit! */");
if (biscuit::match<c_comment>(text)) {
 //...
}
260デフォルトの名無しさん:2006/11/07(火) 10:29:34
http://www.open-std.org/jtc1/sc22/wg21/
News 2006-11-06: C++ Standard Core Language Issues List (Revision 44) is available
261244:2006/11/07(火) 15:23:23
下記のコードでfunc2()の引数objが初期化される時に
ユーザ定義コピーコンストラクタありだと
 c obj = c() ;
ユーザ定義コピーコンストラクタなしだと
 c tmp = c() ; c obj = c ;
となるみたいです。

DEBUG版だから最適化無効になっているはずなんですけどね。
コンパイラの最適化の話ではなく、C++の言語仕様なんだろうか。
--
struct c
{
c(){ cout << "c ctor" << endl ; }
//c( const c &obj ){cout << "c copy ctor" << endl ;}
~c(){ cout << "c dtor" << endl ;}
} ;

void func2( c obj ) {cout << "func2" << endl ; }

で、以下をユーザ定義コピーコンストラクタあり/なしで実行すると、
func2( c() ) ;

ユーザ定義コピーコンストラクタあり
c ctor
func2
c dtor

ユーザ定義コピーコンストラクタあり
c ctor
func2
c dtor
c dtor
262デフォルトの名無しさん:2006/11/07(火) 16:08:46
実行結果をノートパッドなどに出力する方法教えてください・・・
263262:2006/11/07(火) 16:09:18
スレ違いでしたすいません
264デフォルトの名無しさん:2006/11/07(火) 16:13:26
動的な型決定みたいなことをしたいのですが、どこかに適当なサンプルコードなどないでしょうか

template< Any>//??
Any detAnyFromIndex(int index)
{
if(index==0)
return( (char)(... ) )
if(index==1)
return( (int)(... ) )
if(index==2)
return( (double)(... ) )
}
265デフォルトの名無しさん:2006/11/07(火) 16:45:52
>>264
templateをなんだと思ってるんだ?

最近template関係の質問多くなったな
それもアホみたいなのが。
流行ってんの?
266264:2006/11/07(火) 17:04:54
templateでなくてもいいのだけど
関数の返す方を動的に変えたい
boost::any detAnyFromIndex(int index)
だと、データを取り出すときに結局
boost::any_cast<float>(output )
が必要になって処理が後回しにされるだけで解決にならない
267デフォルトの名無しさん:2006/11/07(火) 17:14:17
無理
268デフォルトの名無しさん:2006/11/07(火) 17:32:39
>>266
型は静的なものだから、動的に取得することは出来ません。
269デフォルトの名無しさん:2006/11/07(火) 17:39:08
できるもん!
270デフォルトの名無しさん:2006/11/07(火) 17:55:02
ドラえもん!
271デフォルトの名無しさん:2006/11/07(火) 17:55:20
>>266
その自身たっぷりんりんの発言はどこから来るんだ?
さっさとしね
272デフォルトの名無しさん:2006/11/07(火) 18:00:22
>>266
やりたいことを明確に汁
273デフォルトの名無しさん:2006/11/07(火) 18:06:21
>>264>>266
できません。
274264:2006/11/07(火) 18:06:45
>>271
なぜに自身たっぷり?
よくわからないけど、プリプロセッサでなんとかできないか試してみる
275デフォルトの名無しさん:2006/11/07(火) 18:10:10
>>274
できません。
276デフォルトの名無しさん:2006/11/07(火) 18:13:04
>>274
できないっつってんだろうがボケww
プリプロセッサとか・・w
もう一度template勉強しろ
277264:2006/11/07(火) 18:14:27
自己解決
boostのHPにあったサンプルで解決できそうです

#define ARITHMETIC_TYPE(I) ARITHMETIC_TYPE ## I

#define ARITHMETIC_TYPE0 bool
#define ARITHMETIC_TYPE1 char
#define ARITHMETIC_TYPE2 signed char
#define ARITHMETIC_TYPE3 unsigned char
#define ARITHMETIC_TYPE4 short
#define ARITHMETIC_TYPE5 unsigned short
#define ARITHMETIC_TYPE6 int
#define ARITHMETIC_TYPE7 unsigned int
#define ARITHMETIC_TYPE8 long
#define ARITHMETIC_TYPE9 unsigned long
#define ARITHMETIC_TYPE10 float
#define ARITHMETIC_TYPE11 double
#define ARITHMETIC_TYPE12 long double
278デフォルトの名無しさん:2006/11/07(火) 18:16:05
>>277
できません。
279デフォルトの名無しさん:2006/11/07(火) 18:16:25
「 t e m p l a t e 」で、「 動 的 な 型 決 定 み た い な こ と 」をしたいのですが、できません><
boost使っても出来ません><;;;;
どうすればできますか???
プリプロセッサ使えばできるんですか><
280デフォルトの名無しさん:2006/11/07(火) 18:17:11
本人が満足してんだからほっとけ。
やりたいことは分かったしそれが最適だと思うなら勝手にしろ
281264:2006/11/07(火) 18:17:37
>>278
バカの一つ覚えみたいにうるせーよ
できねーってゆうならその証拠みせろ
282デフォルトの名無しさん:2006/11/07(火) 18:19:24
>>281
マクロはコンパイル時に展開されますから、動的な処理は行えません。
相談室で相談に対して正解教えてるのにその口ぶり・・・酷ス
283デフォルトの名無しさん:2006/11/07(火) 18:23:35
自分で Variant 型でも作ってみたら?
284デフォルトの名無しさん:2006/11/07(火) 18:23:55
ふむ。。。
具体的な例がでてないから、やきもきするのはわかるが、
その態度は気にくわんな
学生さん?
285264:2006/11/07(火) 18:27:11
>>282
確かにできませんでした。
あきらめます。
286デフォルトの名無しさん:2006/11/07(火) 18:28:42
出来ないことの具体例ってのは難しいな。
287デフォルトの名無しさん:2006/11/07(火) 19:13:33
union
288デフォルトの名無しさん:2006/11/07(火) 19:23:51
C++かWinAPIかちょっと判断できなかったんでこちらで質問させてください
リソース管理クラスの目的で関数ポインタをメンバにしようとしてるんですが、
呼び出し規約が違うと関数ポインタに代入できないようで困ってます。
(今は各規約のポインタとコンストラクタを持ってる)
呼び出し規約ってのはtemplateで決定できないんでしょうか?

#include <windows.h>
template <typename T, typename R = void>
class AutoResource {
T resource;
R (/*WINAPIV*/WINAPI *killFunc)(T);
//  ↑ここをtempleateに
public:
AutoResource(T res, R (/*WINAPIV*/WINAPI *func)(T) ) : resource(res), killFunc(func) {}
~AutoResource() { (this->killFunc)(this->resource); }
};

void f(HMODULE h) { FreeLibrary(h); }
int main() {
AutoResource<HMODULE, BOOL> res(LoadLibrary(TEXT("freetype.dll")), FreeLibrary);
//AutoResource<HMODULE> ress(LoadLibrary(TEXT("shell32.dll")), f);
return 0;
}

コンパイラはVC8です
289デフォルトの名無しさん:2006/11/07(火) 19:48:09
>>288

template< typename T, typename R > struct killer_base
 : public std::unary_function< T, R > {
 virtual ~killer_base() {};
 virtual R operator()( T ) = 0;
};
template< typename F, typename T, typename R > struct killer
 : public killer_base<T,R> {
 F f;
 killer( F func ) : f(func) {}
 R operator()( T t ) { return f(t); }
};
template <typename T, typename R = void>
class AutoResource {
T resource;
auto_ptr< killer_base<T,R> > const killFunc; // noncopyable
public:
template< typename KillerFunc >
AutoResource(T res, KillerFunc func )
 : resource(res), killFunc(new killer<KillerFunc,T,R>(func)) {}
~AutoResource() { (*killFunc)(resource); }
};
290デフォルトの名無しさん:2006/11/07(火) 19:49:37
>>288
boost::function
291デフォルトの名無しさん:2006/11/07(火) 20:03:57
よこからすまん。
>>289のkiller_baseって何で必要なの?
292デフォルトの名無しさん:2006/11/07(火) 20:22:53
AutoResourceのコンストラクタの時点で関数の型が決定するから
293デフォルトの名無しさん:2006/11/07(火) 20:28:46
>>291
boost::shared_ptr の sp_counted_base と、sp_counted_impl みたいなもの。
コンストラクタ呼び出しで渡された型を保存しておくための方法。

294デフォルトの名無しさん:2006/11/07(火) 20:41:12
>>289
(゚д゚)スゲー とりあえず意図したとおりのものになりました
ありがとうございます



内容はまだ理解できてないけどな! 
295デフォルトの名無しさん:2006/11/07(火) 21:19:13
>>271
人格障害の診断をうけたほうがいいぞ
296デフォルトの名無しさん:2006/11/07(火) 22:19:59
>>292>>293

すまん。
まったくわからん。
297デフォルトの名無しさん:2006/11/07(火) 22:46:18
>>296
ああすることによって、killer<F, T, R>型(のうち具体的にはF)がなんであっても
統一的に基底クラスであるkiller_base<T, R>型のオブジェクトとして取り扱えるようになる。

boost::functionなんかも同じようなことをやっている。
298デフォルトの名無しさん:2006/11/07(火) 23:01:36
あああああああああああOK
理解した。ありがつ。
299デフォルトの名無しさん:2006/11/07(火) 23:47:53
#include "stdafx.h"
#include <limits.h>

int _tmain(int argc, _TCHAR* argv[])
{
int n,max=INT_MIN,min=INT_MAX;
bool flag=true;
do{
printf("整数を入力してください。");
scanf_s("%d",&n);
if(n==0) flag=false;
if(n>max) max=n;
else if(n<min) min=n;
}while(flag);
printf_s("\n最大は%d 最小は%dです。\n",max,min);

return 0;
}


VC++ Proでこれを実行すると0を入力したとき
コマンドプロント閉じちゃうんですがどうしたらいいんですか
300299:2006/11/07(火) 23:51:01
あ、できました。
301デフォルトの名無しさん:2006/11/07(火) 23:54:46
ああ、答えをいただいて3時間超、ようやく判った。
ありがとう、おめでとう。
302デフォルトの名無しさん:2006/11/08(水) 00:03:32
ところでOperator()って何のためにあるの?
意味不明。関数ポインタでいいじゃん
303デフォルトの名無しさん:2006/11/08(水) 00:24:23
ステートを持たせることができる
304デフォルトの名無しさん:2006/11/08(水) 00:25:31
そんなもん構造体引数に渡せばいいだろ
305デフォルトの名無しさん:2006/11/08(水) 00:31:13
for_eachアルゴリズムの第三引数とか。
だんだんチラシの裏っぽくなってきた。
306デフォルトの名無しさん:2006/11/08(水) 00:34:19
>>302
D&Eには、理由がない限りどの演算子も多重定義できるようにしたというようなことが書いてある。
そもそも導入された理由はその流れだろう。

>>304
Windows APIのコールバック関数ではそういう風になっているな。
だが、operator ()を使って(というよりboost::bindなんかで束縛してやって)のほうが、スマートだと俺は思う。
STLを考えた偉い人もたぶんそんなことを考えたのだろう。
307デフォルトの名無しさん:2006/11/08(水) 00:35:19
型で管理できる。
308デフォルトの名無しさん:2006/11/08(水) 00:37:45
templateで渡せる。
309デフォルトの名無しさん:2006/11/08(水) 00:40:02
>>308
tmplateでどうやって渡すの?
サンプル教えて
310デフォルトの名無しさん:2006/11/08(水) 00:50:37
template<typename FUNC>
void call_funcobj(FUNC f)
{
f("hello,world") ;
}

void func(std::string const & message)
{ std::cout << message << std::endl ; } ;


class FuncObj
{
std::string header_ ;
public :
FuncObj(std::string const & header) : header_(header) { }
void operator() (std::string const & message)
{ std::cout << header_ << message << std::endl ; }

} ;

int main()
{
call_funcobj(func) ;
FuncObj f1("message : "), f2("メッセージ:") ;
call_funcobj(f1) ;
call_funcobj(f2) ;
}
311デフォルトの名無しさん:2006/11/08(水) 01:07:07
メンバ関数を呼び出させることができるのも便利だと思っている。
class Window
{
    // ...
public:
    void SetTitle(const std::string&);
    // ...
};

void f()
{
    Window w;
    call_funcobj(boost::bind(&Window::SetTitle, w, _1));
}
312デフォルトの名無しさん:2006/11/08(水) 02:59:48
http://www.open-std.org/jtc1/sc22/wg21/
News 2006-11-07: The 2006-09 mailing is available

Working Draft の新しい奴 n2134.pdf がうpされてる。
313デフォルトの名無しさん:2006/11/08(水) 03:45:37
どなたか ↓ のコードを utf8 化する方法を教えてください。

ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/kasumi/kasumi2/
314デフォルトの名無しさん:2006/11/08(水) 05:02:17
>>313
つ[iconv]
315デフォルトの名無しさん:2006/11/08(水) 13:40:34
>>302
関数ポインタより効率がよくなるから
316デフォルトの名無しさん:2006/11/08(水) 18:59:29
ポインターからtypedefするにはどうすればいいのか
どなたかお教えいただけないでしょうか

struct sttest
{
typedef int myint;
};
typedef sttest * psttest;
typedef psttest->myint mymyint;
こんな感じのtypedefをしたいのですが構文エラーe2143などとなって
コンパイルできません
317デフォルトの名無しさん:2006/11/08(水) 19:11:52
>>316
何がしたいんだ?
typedefは型を定義するものだよ
318デフォルトの名無しさん:2006/11/08(水) 19:16:24
typedef sttest::myint mymyint;
こういうことがやりたいのかな?
319316:2006/11/08(水) 19:16:52
したいことは

psttestしか受け取れないclassの中でstruct sttest で定義した
ypedefの情報をうけとりたいのです

template<typename Ptr = psttest>
class MyClass
{
typedef Ptr::myint mymyint;
};
320デフォルトの名無しさん:2006/11/08(水) 19:17:22
ESP の訓練をかねて >>316 の思考を読んだ結果

typedef sttest::myint mymyint

がしたいんじゃないかと感じた。
321316:2006/11/08(水) 19:32:45
ポインターを渡すようにクラスMyClass を設計してしまったため
ポインターが持ってるtypedefの情報を渡すことができなくなって
しまったので、なんとか解決したい。というのがやりたいことです。
322デフォルトの名無しさん:2006/11/08(水) 19:38:51
>>321
ポインタがtypedefの情報もってるって…何か壮大に勘違いしてないか?
323デフォルトの名無しさん:2006/11/08(水) 19:49:41
>>316がしたい事は別の構文で書くと、

typedef a+b c と同じような事だと思った。
324デフォルトの名無しさん:2006/11/08(水) 20:02:22
template<typename T> struct RemovePointer
{ typedef typename T::myint type; };

template<typename T> struct RemovePointer<T*>
{ typedef typename T::myint type; };

typedef RemovePointer<psttest>::type mymyint;
325デフォルトの名無しさん:2006/11/08(水) 20:08:53
なるほど、ポインタ型で特殊化するわけか・・・
326316:2006/11/08(水) 20:11:52
>>324
できました
感謝
327デフォルトの名無しさん:2006/11/08(水) 20:53:06
vector<vector<double>* > v;

vectorに値を格納していって、

for(int i = 0; i < n; i++){
for(int j = 0; j < x; j++)
cout << (*v[i])[j] << endl;
}
で表示するんですけど、

(*v[i])[j] ってどういう意味なんでしょうか?
不勉強で申し訳ないのですが、ご教授をお願いできないでしょうか?
328デフォルトの名無しさん:2006/11/08(水) 20:56:19
>>327
v の i 番目 (0から数える。以下も同様) に入っているポインタが指す先にある
vector<double>型のインスタンスの、j番目の要素への参照。
329デフォルトの名無しさん:2006/11/08(水) 20:57:57
>>327
おかしくないか?
*v[i][j]だと思うが。
330デフォルトの名無しさん:2006/11/08(水) 20:59:54
すまん
vector<double*>と勘違いしてた。
331デフォルトの名無しさん:2006/11/08(水) 21:02:34
>>328
ありがとうございます!
助かりました!

>>329
参考書をそのまま写したんですが、
おっしゃる通りにやってみたところ、
エラーになりました。
332デフォルトの名無しさん:2006/11/08(水) 21:03:06
はい。勉強になりました。
333デフォルトの名無しさん:2006/11/08(水) 22:18:37
>>322-323

なかなかのバカ丸出しぶりでしたな
334デフォルトの名無しさん:2006/11/08(水) 22:41:12
316よりましだけどな。
335デフォルトの名無しさん:2006/11/08(水) 22:47:32
template も知ってるようだし、「何かやり方があるんじゃないか」と
感づくあたりだけ 316 の方がましだと思う。
文法めちゃくちゃでも一応コンパイルしてみる勇気も買うw

「ポインター」じゃなくて「ポインター型」と書いていればもっと良かったけど。
336デフォルトの名無しさん:2006/11/08(水) 23:12:54
関数ポインタより効率いいっていうけど嘘じゃね?
どうアセンブラのコードとにらめっこしても
そんなコードはいてねぇよ
337デフォルトの名無しさん:2006/11/08(水) 23:53:35
って関数オブジェクトのことな
338デフォルトの名無しさん:2006/11/09(木) 00:07:15
>>336
template<typename Function> void call(Function f) { f(); }

Function が関数ポインタなら、おそらくインライン展開は行われない。
Function が関数オブジェクトなら、普通にインライン展開の対象になる。
339デフォルトの名無しさん:2006/11/09(木) 01:10:02
ちょっと質問。

Named Template Parameterの情報って、どのへんを調べれば出てくる?
ttp://www.kmonos.net/alang/cpp/glossary.html
にさわりだけ出てるんだが、もうちょっと具体的なやつが見つからなくて。
340デフォルトの名無しさん:2006/11/09(木) 02:03:12
質問です。
クラステンプレートの中にメンバ関数テンプレートがあります。

template< typename T >
class MyClass {
public:
  template< typename U > void f( const U& u );
};

この関数f()をクラスの宣言外で定義する書き方が分かりません。
どなたか分かる方がいらっしゃればご教示願います。

以上、宜しくお願いいたします。
341デフォルトの名無しさん:2006/11/09(木) 02:11:22
template< typename T >
template< typename U >
void MyClass<T>::f( const U& u ) {
...
}
342デフォルトの名無しさん:2006/11/09(木) 02:38:28
343デフォルトの名無しさん:2006/11/09(木) 03:01:56
>>342
や、そのぐらいはしてある。

…といいつつ出てきたエントリをうろちょろしてたら、
わりといいのが見つかった。thx。
ttp://d.hatena.ne.jp/uskz/20060607/p1

まあ何となくはわかった気になれた。
もうちょっとちゃんと知りたいなら、"C++ Templates" を読めという感じらしい。
344デフォルトの名無しさん:2006/11/09(木) 06:35:32
ModernC++Design読んで満足してた俺はだめだなぁ・・・
これが思考停止ってやつですかorz

NTPすげー
345デフォルトの名無しさん:2006/11/09(木) 07:34:43
struct B{ typedef int H; };
struct D1 :public B {};
struct D2 :public B {};
class DD1 :public D1, public D2{};

int main(){
 printf( "%d\n", sizeof( DD1::H ) );
 return 0;
}

これコンパイル通ったんだが、
typedefの場合はメソッドとかと違って曖昧無しにコンパイラが解決してくれるの?
346デフォルトの名無しさん:2006/11/09(木) 09:12:40
>>345
D1::H と D2::H が同じものを指すので、 DD1::H という名前の検索自体は問題ない。

曖昧な基底クラスでエラーになるのは、そっから先の使い方によるらしい。
(4.11-2, 5.2.5-5)
347デフォルトの名無しさん:2006/11/09(木) 11:06:22
>>345
その場合、関数だと曖昧だけどtypedefの場合は大丈夫らしい
NTPの場合は仮想継承を使って基底クラスのtypedefしたものをoverrideしてる。
class B; // typedef int H;
class D1 :virtual public B; //typedef char H;
class D2 :virtual public B; //なにもしない
class DD1 :public D1, D2;
で、DD1::Hはcharになる。
ただの継承だとHは名前解決失敗するっぽい
名前解決は複雑だなー、、、
348デフォルトの名無しさん:2006/11/09(木) 12:21:06
NTP じゃないが、ソレに近いもの。
policy_category を使って、SmartPtr のポリシーを自動判別。
http://www.cuj.com/documents/s=8890/cujexp0310alexandr/
3年前にこれを見たとき、正直感動した。

smart_ptr<T, storage<_> > でもいいし、
smart_ptr<T, ref_counted<_> > でもいい。
349デフォルトの名無しさん:2006/11/09(木) 12:58:20
菱形継承使わなくても(というか菱形継承使った NTP 実装は面倒),
最近は Boost.MPL でかなり高度なTMP の土台が用意されているので,
そちらを使えばもっと直接かつ見通しの良い形で実装できるような気もします.

http://thread.gmane.org/gmane.comp.lib.boost.devel/81060/focus=81080
350デフォルトの名無しさん:2006/11/09(木) 13:01:34
>>338
この程度の単純なコールバックだと,コンパイル時評価可能な
関数ポインタ値ならインライン展開しうるコンパイラもあります. MSVC とか.
351デフォルトの名無しさん:2006/11/09(木) 16:38:09
コード晒してから言え
352デフォルトの名無しさん:2006/11/09(木) 16:51:54
角度とか.
353デフォルトの名無しさん:2006/11/09(木) 17:06:38
ぶっちゃけ、boostの使い方を勉強する方がいいと思った > 複雑なtemplateテクニックを書くより
354デフォルトの名無しさん:2006/11/09(木) 17:16:23
>>348
わかんねー(´д`;
<_>とか、boost::mplがわからんです。
というかboost使ったことない・・・
355デフォルトの名無しさん:2006/11/09(木) 17:24:32
>>354
とりあえずlambdaだけ使って味噌。
笑うくらいスッゲェーとか思うから。

後は興味が354を導くはず
356デフォルトの名無しさん:2006/11/09(木) 17:24:48
>>354
ref_counted<_> は、lambda の _1 と同じく引数のプレイスホルダで、
この場合 T に展開される。
>>348 の smart_ptr< T, ref_counted<_> > は、コンパイル時に以下のように
書くのと同じ効果がある。

smart_ptr< T, ref_counted<T> >
357デフォルトの名無しさん:2006/11/09(木) 17:59:03
lambda って使うと実行ファイルのサイズがすげー事にならない?
358デフォルトの名無しさん:2006/11/09(木) 17:59:55
>>355>>356
ありがとうございます。
boostのラムダ読んでみます
359デフォルトの名無しさん:2006/11/10(金) 15:02:15
#pragma includepath
ってVS2005では使えないのでしょうか?
何かコード中でincludepathを設定する方法はないのでしょうか
360デフォルトの名無しさん:2006/11/10(金) 15:22:04
>>359
インクルードするときにフルパスで書けばいいんでね?
例えば #include "/usr/include/stdio.h"とか。
つーか、スレ違いだがね。
361デフォルトの名無しさん:2006/11/10(金) 23:31:20
あのさー
Cの構造体をC++のクラスにラップしたいんだけど

typedef stract a
struct a *next;
...
}A;

こんなかんじでnextで別のポインタ参照するような構造体を
ラップするときってどうしてる?
362デフォルトの名無しさん:2006/11/10(金) 23:38:32
>>361
こんなかんじ、といっても文法めちゃくちゃで何をしたいのか分からない。
構造体をクラスでラップするとはどういう意味?
とりあえず落ち着いて話せ。
363デフォルトの名無しさん:2006/11/10(金) 23:41:10
typedef stract a{
struct a *next;
...
}A;;
こんなのだよこんなの、
364デフォルトの名無しさん:2006/11/10(金) 23:43:18
意味がわからにあ
365デフォルトの名無しさん:2006/11/10(金) 23:44:02
class A {
A* next;
..
};

ってことか?
366デフォルトの名無しさん:2006/11/10(金) 23:45:45
>>363
これだけだと、どういうパターンを適用するのか判断が難しいなぁ。
単純なラップじゃなくなるけど、
自分ならstd::list + std::list::iteratorみたいに巡回と管理のクラスの二つにわけるかな。
367デフォルトの名無しさん:2006/11/10(金) 23:48:49
>>366
ふむふむそっかぁ、同じデータ構造なんだけど
全然別々の名前のリスト状のデータ構造があって

ベタにCのデータ構造操作する部分記述したくないんだけど
やっぱそうやるしかないかぁ
368デフォルトの名無しさん:2006/11/11(土) 00:06:58
掲示板をまるで会話のように使うとは。
言葉のニュアンスも読む人間の考えに任せるしかないのにそれは酷いだろう。
言葉を改めろよ。
369デフォルトの名無しさん:2006/11/11(土) 00:26:42
朝鮮人に何を言っても無駄。
自分の事しか考えてないんだから。
370デフォルトの名無しさん:2006/11/11(土) 00:37:53
テンプレートクラスに関する質問です。

template <class T>
class Sample
{
public:
   Sample(const T& t) : m_t(t){}
private:
   T m_t;
};

みたいな事をやったとき、class Tには何でも指定できてしまいますが、
このclass Tをあるクラスのサブクラスのみに指定したいのです。
どうしたら、いいのでしょうか?

環境は
vs2005 WinXPPro,SP2です。
371デフォルトの名無しさん:2006/11/11(土) 00:49:14
template <typename T>
class Sample
{
   BOOST_STATIC_ASSERT(boost::is_base_and_derived<あるクラス, T>::value);
public:
   Sample(const T& t) : m_t(t){}
private:
   T m_t;
};
372デフォルトの名無しさん:2006/11/11(土) 00:52:11
>>370
特殊化すればいいだけなんじゃないの?
本に書いてあることだよ?
373デフォルトの名無しさん:2006/11/11(土) 00:55:55
子供が全部public継承してるなら、テンプレートじゃなくて基本クラス要求すればいいんじゃない?
374370:2006/11/11(土) 01:24:25
is_base_and_derivedでぐぐったら、それらしい情報が出てきました。
どうもありがとうございます。
375デフォルトの名無しさん:2006/11/11(土) 04:02:04
オペレータをオーバーロードして、
クラスAのポインタでクラスの中身(int t)を比較したいんですが、

bool operator< (A *a) const{
return (t < a->t);
}
bool operator> (A *a) const {
return (t > a->t);
}
とクラスに書いてやって、

A *a1 = new A;
A *a2 = new A;
a1->t = 2;
a2->t = 1;
これで、a1 > a2
をしても真にならないのですが、どこか間違ってますでしょうか?
376デフォルトの名無しさん:2006/11/11(土) 04:15:35
>>375
ポインタ同士の比較は配列の要素間の前後関係という意味になる。オーバーロードはできない。
そのオーバーロードの宣言は *a1 > a2 としたときに使われる。
377デフォルトの名無しさん:2006/11/11(土) 04:17:16
struct A {
int t;
bool operator<(const A& a) const{
return (t < a.t);
}
bool operator>(const A& a) const {
return (t > a.t);
}
};

int main()
{
A* a1 = new A;
A* a2 = new A;
a1->t = 2;
a2->t = 1;
std::cout << std::boolalpha << (*a1 > *a2) << std::endl;
}
378375:2006/11/11(土) 05:04:06
>>376,377 なるほど、ありがとうございます。

ちなみに
priority_queue<A*, vector<A*, allocator<A*> >, greater<A*> >
にAをtの昇順に入れてやろうと思ったのですが、
おそらくそれが原因で上手くソート出来ませんでした。
うまい解決策はありませんでしょうか。
379デフォルトの名無しさん:2006/11/11(土) 05:47:04
>>378
greater<A*> を専用の比較関数で置きかえれ。
380デフォルトの名無しさん:2006/11/11(土) 06:56:53
381デフォルトの名無しさん:2006/11/11(土) 09:26:35
class 内の関数のアドレスを取る事が出来ないのはなぜでしょうか。

class CTest {
public:
void func(){ };
}

int main() {
CTest t;
cout << &(t.func) << endl; // エラー
cout << (CTest::func) << endl; // 問題ないが、必ず値が1となる
}
382デフォルトの名無しさん:2006/11/11(土) 09:31:04
cout << &(CTest::func) << endl; // 問題ないが、必ず値が1となる

アンドが抜けてました失礼。
383デフォルトの名無しさん:2006/11/11(土) 10:10:56
static void func()アドレスをとるようになってるから。
384デフォルトの名無しさん:2006/11/11(土) 11:07:10
相談です。

VC2005EEにてビルドしたらこのようなエラー構文が出ました。
対処方法を教えてください。
※○○はわしの名前

c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: '  MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。
385デフォルトの名無しさん:2006/11/11(土) 11:33:30
全 角 空 白

編集⇒詳細⇒スペースの表示
386デフォルトの名無しさん:2006/11/11(土) 12:01:04
iteratorって使い方は解るのですが、自分の作るクラスに
定義する場合どのように定義すればよいのでしょうか?
387デフォルトの名無しさん:2006/11/11(土) 12:05:23
>>382
&(CTest::func) じゃなくて &CTest::func じゃないと駄目らしいぜ。 (5.3.1 -3-)
388デフォルトの名無しさん:2006/11/11(土) 12:07:28
>>382
アンドって書くと条件式の論理関になるから、記号の&単体はアンパサンドと表記するのが正しかったような
389デフォルトの名無しさん:2006/11/11(土) 12:08:20
>>386
規格の 24.1 にある要件を満たすような型として定義する。
わりと面倒なんだけど boost の iterator ライブラリを使うと楽が出来る。 >>380
390デフォルトの名無しさん:2006/11/11(土) 12:30:27
>>381
ストリームに対するoperator<<に void (CTest::func*)() を取るものがないので
暗黙の型変換でboolのやつが呼ばれてるんだろ。
391デフォルトの名無しさん:2006/11/11(土) 14:16:12
>>213
うまい事言うね
392デフォルトの名無しさん:2006/11/11(土) 14:26:31
>>357
DLLで解決。
393デフォルトの名無しさん:2006/11/11(土) 14:54:13
>>385
どうもすいません
それしたあと、再度ビルドしたんですがまた同じエラー構文が出ました。

c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: '  MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。(新しい機能 ; ヘルプを参照)
使用可能なユーザー定義された変換演算子がない、または
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
394デフォルトの名無しさん:2006/11/11(土) 14:56:19
>>393
表示設定を変えただけなんだから、その後にソース見て修正しないと駄目に決まってるだろ。
395デフォルトの名無しさん:2006/11/11(土) 14:57:39
>>393
全角スペースを半角スペースにしろ!
396デフォルトの名無しさん:2006/11/11(土) 15:00:40
>>393
同じエラーなら貼らんでいい。総じて、脳みそが足りてないんじゃないか?
397デフォルトの名無しさん:2006/11/11(土) 15:09:03
いや、構文見たらちゃんと半角スペースなってますよぉ
398デフォルトの名無しさん:2006/11/11(土) 15:10:44
なってないからエラーが出てるんだ
399デフォルトの名無しさん:2006/11/11(土) 15:12:09
98行目をもう一回書きなおせ
もう来るな 氏ねカス
400デフォルトの名無しさん:2006/11/11(土) 15:17:41
MessageBox::Show(textBox1->Text + "さん、こんにちは。");

この構文です。
どう見ても半角ですよぉ・・・
「さん、こんにちは。」は全角ですけど本に沿ってんですよぉ・・・
401デフォルトの名無しさん:2006/11/11(土) 15:19:20
全 角 「空 白」
     ~~~~~~~~~~

空 白


空 白


空 白

ほんとに >> 385 をやったのか?

402デフォルトの名無しさん:2006/11/11(土) 15:21:42
やりましたよぉ・・・
そうしたらソースコードのところに→マークがいっぱいでます
これをどうすんです・・・
403デフォルトの名無しさん:2006/11/11(土) 15:21:53
>>400
"さん、こんにちは。"を試しに"xxx"でやってみたら通る?
404デフォルトの名無しさん:2006/11/11(土) 15:23:50
ダメです・・・
405デフォルトの名無しさん:2006/11/11(土) 15:24:21
「わし」とか「よぉ・・・」とかキモ過ぎ。おまけにバカときた。消えてくれ。
406デフォルトの名無しさん:2006/11/11(土) 15:25:04
いやいい加減に出来とかんといかんのですよ
頼みますよマジで
407デフォルトの名無しさん:2006/11/11(土) 15:25:24
もういいや。MessageBox の前に全角スペースがあるだろ。それを半角スペースに直せ。
いっそその行消してもっかい全部書き直せ。
408デフォルトの名無しさん:2006/11/11(土) 15:25:39
答えが見つからないととりあえず質問者を叩く、と。
409デフォルトの名無しさん:2006/11/11(土) 15:29:41
>>404
じゃあ

MessageBox::Show("xxx");

では?
410デフォルトの名無しさん:2006/11/11(土) 15:32:52
どうやら出来たようです。
みんなありがとございましたぁ・・
411デフォルトの名無しさん:2006/11/11(土) 15:33:21
>>410
できれば原因も教えて欲しい
412デフォルトの名無しさん:2006/11/11(土) 15:35:31
>>407指摘のMessageBOXの前の空白が全角だったのが原因でした・・・ぁ
413デフォルトの名無しさん:2006/11/11(土) 15:35:49
4時間も前から正解でてたのにな・・・
414デフォルトの名無しさん:2006/11/11(土) 15:36:55
>>412
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
もうくんなもうくんなもうくんなもうくんなもうくんなもうくんなもうくんなもうくんな
415デフォルトの名無しさん:2006/11/11(土) 15:37:07
>>412
ドンマイです(;^^;)
416デフォルトの名無しさん:2006/11/11(土) 15:37:23
とほほ・・・ほ
417デフォルトの名無しさん:2006/11/11(土) 15:38:30
322 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 11:08:59
相談です。


VC++2005EEにてビルドしたらこのようなエラー構文が出ました。
対処方法を教えてください。
※○○はわしの名前

c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C3872: '0x3000': この文字を識別子で使用することはできません
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2653: '  MessageBox' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\○○\my documents\visual studio 2005\projects\hello\hello\Form1.h(98) : error C2664: 'void System::Windows::Forms::Form::Show(System::Windows::Forms::IWin32Window ^)' :
1 番目の引数を 'System::String ^' から 'System::Windows::Forms::IWin32Window ^' に変換できません。

323 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 11:20:55
>>322
全角スペースを半角に置換する

325 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 11:25:34
すいません、なるべく煽らんで下さい
418デフォルトの名無しさん:2006/11/11(土) 15:39:47
>>417
おもしろいです。このスレにいて本当に良かったと思える一日でした
419デフォルトの名無しさん:2006/11/11(土) 15:44:15
俺じゃねえ
420デフォルトの名無しさん:2006/11/11(土) 17:33:48
エラー読めないヤツって生きてる価値ないよね。
421デフォルトの名無しさん:2006/11/11(土) 17:52:02
「教えられたことを咀嚼する気は全然無いですが、わかるまで教えてください」
って言ってるようなもんだからな。
422デフォルトの名無しさん:2006/11/11(土) 18:04:10
まるで朝鮮人のような奴だな。
423デフォルトの名無しさん:2006/11/11(土) 20:57:16
こんなのが職場に居たらやってられんな
424デフォルトの名無しさん:2006/11/11(土) 20:59:17
質問してくれるだけいい
質問にすら来ないでわからないことをほったらかしにするやつのほうがやばい
425デフォルトの名無しさん:2006/11/11(土) 21:00:35
五十歩百歩だと思うが。
426デフォルトの名無しさん:2006/11/11(土) 21:10:03
どっちが五十歩でどっちが百歩だ?
427デフォルトの名無しさん:2006/11/11(土) 21:15:01
そんなことはどっちでもよいからこそ五十歩百歩と言うのだ。
428デフォルトの名無しさん:2006/11/11(土) 21:22:53
それでは曖昧性があります。
コンパイルエラーです。
429427:2006/11/11(土) 21:23:26
i|!| |i┏┓! i!┏┳┓| |||i|!i| ||!i|| |||ii| ||| ||| |i||!|i│i!┏┓i!|
|i|┏┛┗━╋┻┛|i!||!|ii|| i|!i||i|┏━┓ ┏┓i|i| i┃┃i!|
i||┗┓┏┓┃||i┏━━━━┓┗━┛ ┃┃|i||!i┃┃i!|
|i |!|i┃┃┃┃i||┗━━━━┛|i|| || ||||!┃┃i|i| i┗┛!i|
i||i ||┃┃┃┃|! |||i ||i    !|||!|┏━━┛┃|i||!i┏┓i|!
|i!i |!┗┛┗┛i|!i|  / |   / | ┗━━━┛i|i| i┗┛i!|
i| |||i|!i| ||!|i||i!   /,_ ┴─/ ヽ      |!i| ||| |i||!|i|i|||| ||i
|i|| ||i!i||     (_゜.,》.'(_゜,》)ミ ヽ       ! | |!i||!|ii||!|ii|
i|ii        / ,,__,ニ、、 ノ( |           i|i!|i|
|i        | Y~~/~y} `, ~ |  そ、そんなー…   |i
!.          | ,k.,.,!,.,.,r| ,!  く             |
i        / <ニニニ'ノ    \               l
430デフォルトの名無しさん:2006/11/11(土) 21:24:26
くだらないAA張ってうけるとでも思ってるのか
431デフォルトの名無しさん:2006/11/11(土) 21:25:15
初盆(´・ω・`)
432デフォルトの名無しさん:2006/11/11(土) 21:33:26
さっきのコンパイルエラー出て助けてくれってやつLinux板にも
マ板にも書き込んでるんだな
433デフォルトの名無しさん:2006/11/11(土) 21:37:41
434デフォルトの名無しさん:2006/11/11(土) 21:57:25
親切な奴多いよな
いちいちバカに答えてるの。
(軽蔑の意味じゃなくて)普通にすばらしいと思う
435デフォルトの名無しさん:2006/11/11(土) 22:17:04
なぜかム板は律儀でもあるけど、ネタに対して攻撃的な反応が多いのが(´・ω・`)
ところで
> System::Windows::Forms:: ってC#じゃないの C++/CLIとか?
436デフォルトの名無しさん:2006/11/11(土) 22:20:06
^演算子(GC管理のリソースを指すポインタ)が使われているから
C++/CLIだろう。

それにC#だったらSystem.Windows.Formsって書くし
437デフォルトの名無しさん:2006/11/11(土) 22:25:41
そか、サンクス .net触ったことないからわからんかった
438デフォルトの名無しさん:2006/11/12(日) 10:54:36
>>435
プログラマってのは偏屈でプライドが高いから
答えてやってるっていう意識が強いんだろう。
まぁ本来それが正しい姿勢だと思うがね
439デフォルトの名無しさん:2006/11/12(日) 11:10:08
C++で引数に参照渡しを行う場合って
呼び出し元の変数を弄るとき以外に場合はある?
440デフォルトの名無しさん:2006/11/12(日) 11:12:01
コピーさせずに関数に引き渡す場合とか。
constくっつけて変更防止させたりして。
441デフォルトの名無しさん:2006/11/12(日) 11:37:38
string はだいたい、const string& として渡してるな
計測はしてないから、どの程度効果があるか分からんが
442デフォルトの名無しさん:2006/11/12(日) 11:41:40
>>439
コピーコンストラクタとかの処理が重たいクラスは、
積極的に参照渡しにしたほうがよさげ。
443デフォルトの名無しさん:2006/11/12(日) 11:46:15
>>439
俺は呼び出し側で引数を弄りたい場合はポインタ、
弄らなくてもいいけどコピーさせたくない場合はconst参照にしてる。
444デフォルトの名無しさん:2006/11/12(日) 15:08:55
弄りたい場合も参照渡ししてる。
NULL渡す場合があるならポインタ。
445デフォルトの名無しさん:2006/11/12(日) 16:21:12
関数が投げる例外を指定する下の例のようなthrowは
void func() throw();
宣言だけに付ければいいのでしょうか?
それとも実装の方にも付けなければいけないのでしょうか?
446デフォルトの名無しさん:2006/11/12(日) 16:29:37
>>445
それって「私は例外投げませんよ」って指定じゃなかった?
447デフォルトの名無しさん:2006/11/12(日) 16:38:41
>>446
そんなことは分かったうえでの質問だろう。たぶん。
448デフォルトの名無しさん:2006/11/12(日) 17:22:25
それはわかってます。
お尋ねしたいのは、それを宣言に付けさえすれば良いのか、定義の方にも
付けねばならないのかということです。
449デフォルトの名無しさん:2006/11/12(日) 17:27:37
>>447
訊く前に実験実験。

struct hoge{
void payo()throw();
};

//void hoge::payo()throw(){}
void hoge::payo(){}
//error: declaration of `void hoge::payo()' throws different exceptions
450デフォルトの名無しさん:2006/11/12(日) 17:46:56
実験しても環境依存やコンパイラのバグの可能性があるので
仕様そのものを知りたいなあと。
因みに、VC8だとそのコードが通ります。
451デフォルトの名無しさん:2006/11/12(日) 18:28:51
そういう時俺は持ってるコンパイラ全部で通してみるけど。
vcとg++とbcc。
時間があるなら標準規格読む。
452デフォルトの名無しさん:2006/11/12(日) 20:35:39
>>450
http://www.jisc.go.jp/
でX3014で検索。
PDFを開いてから例外指定で検索。
453デフォルトの名無しさん:2006/11/12(日) 22:32:40
#include <windows.h>
class Coordinate{
public:
Coordinate(void): x(coo.X) , y(coo.Y) {}
short& x;
short& y;
COORD coo;
};
class Recta{
public:
Recta(void): t(rec.top) , b(rec.bottom), l(rec.left) , r(rec.right) {}
long& t;
long& b;
long& l;
long& r;
RECT rec;
};
Coordinate C( int x , int y ){
Coordinate c;
c.x = x;
c.y = y;
return c;
}
Recta R( Coordinate c1 , Coordinate c2 ){
Recta r;
r.l = c1.x;
r.t = c1.y;
r.r = c2.x;
r.b = c2.y;
return r;
}
454続き:2006/11/12(日) 22:39:33
>>453
void main(){
Recta r = R( C( 1, 1 ) , C( 10 , 10 ) );
}


環境:VisualStudio.net 2002
やろうとしてること・・・
1. Windows組み込みのCOORDやRECTを、COORDやRECTとして使えるように維持しつつ機能を拡張する
 (サンプルなので余計なメンバ関数は省いてますが)
2. COORD.X とかを小文字のxでアクセスできるように参照変数を付ける
3. (mainでは)頂点を二つ指定して正方形を作る

上のソースを実行すると、四角形の頂点の値が滅茶苦茶な値になっています
(初期化されてない値っぽい?)
1ステップずつ実行すると、どうやらC関数で座標を作るところまではできていて
Cの戻り値でR関数を実行する時点でおかしくなっているようなのですが
どうしてそうなるのかが判りませんです・・・
どこか根本的に無理なことをしようとしてるのでしょうか
455デフォルトの名無しさん:2006/11/12(日) 22:53:08
>>454
デフォルトのコピーコンストラクタが参照の初期化に
コピー元への参照を使ってしまうから、コピー元が
破棄されることによって不正な参照が残ってしまう。
456デフォルトの名無しさん:2006/11/12(日) 22:54:17
MFCのCRectのソースでも見れ
457デフォルトの名無しさん:2006/11/13(月) 00:19:05
レスありがとうございます。
コピーコンストラクタって今まであまり意識していなかったのですが
今回、参照の指す先がおかしいということでしたので
Coordinate( const Coordinate& C )
:x(this->coo.X)
,y(this->coo.Y)
{
this->coo = C.coo;
}
というコピーコンストラクタを明記してみたら、意図していた通りに動くようになりました
458デフォルトの名無しさん:2006/11/13(月) 00:21:14
継承すればいいのに。
459デフォルトの名無しさん:2006/11/13(月) 00:51:56
MFCからですか?
460デフォルトの名無しさん:2006/11/13(月) 00:57:04
>>452
それによると例外指定は関数型の一部にならないってあるから
throw()は宣言にだけ付けときゃ良いわけですね。
461デフォルトの名無しさん:2006/11/13(月) 01:14:28
>460
でも、throw指定するのは(nothrow指定含めて)時代遅れだと
なんかで読んだ気がする。
462デフォルトの名無しさん:2006/11/13(月) 01:57:25
むむ。
nothrowだけは例外的に使うべきだと思ってきたが。(除テンプレート内)
463デフォルトの名無しさん:2006/11/13(月) 02:17:43
nothrowとthrow()は無関係かと・・・・。
nothrowは時代遅れ。
464デフォルトの名無しさん:2006/11/13(月) 05:00:50
>>461-462
多分GotW
Exceptinal C++ Styleでもかかれてる
>>463
文脈嫁
465デフォルトの名無しさん:2006/11/13(月) 05:17:08
>>457
>2. COORD.X とかを小文字のxでアクセスできるように参照変数を付ける
これをする理由がわからん。
参照を返すアクセサを用意するだけでいいような希ガス。
466デフォルトの名無しさん:2006/11/14(火) 09:48:58
>>459
COORD, RECTから
467デフォルトの名無しさん:2006/11/14(火) 18:51:04
nothrowとかthrowは、constみたいにコンパイル時に禁止できる訳じゃなくて、
try { hoge() }
catch(Hoge){throw;}
catch( ... ){ unexpected(); }
みたいなコードを自動生成するだけだら、使えネーって話だな。
468デフォルトの名無しさん:2006/11/15(水) 02:36:58
nothrow と throw() をごっちゃにするなよ。

throw() は呼び出し側の最適化に役に立つ。

nothrow については、ググッたところ、
http://www.nothrow.com/
469デフォルトの名無しさん:2006/11/15(水) 08:06:32
Boostによればthrow()は全然最適化に役立ってないらしいがなw
470デフォルトの名無しさん:2006/11/15(水) 18:32:47
結局thorw()を付けるのと付けないのとでは、どっちがいいんだ?
俺は今まで、デストラクタには必ず付けていたが。
471デフォルトの名無しさん:2006/11/15(水) 18:45:12
>>470
つけなくていいんじゃない?
Boostも例外指定はしないで決定してるみたいだし
472デフォルトの名無しさん:2006/11/15(水) 21:10:08
Binary Hacksになんかこの手のが書いてあったな。
473デフォルトの名無しさん:2006/11/16(木) 09:34:27
Herb Sutter は More Exceptional C++ Item 19 で
「throw() を付けるかどうかは好みの問題だけど、
 個人的には /* throw() */ とコメントで書いておくのが好き」
と言ってるな
474デフォルトの名無しさん:2006/11/16(木) 10:57:47
#if defined(ENABLE_EXCSPEC)
#define NOTHROW throw()
#endif
475デフォルトの名無しさん:2006/11/16(木) 20:12:28
テンプレート使うライブラリはthow()とか書きようがないな
476デフォルトの名無しさん:2006/11/16(木) 21:06:03
Herb Sutter は Exceptional C++ Style でも素敵なガイドラインを
書いてるね。なんとも含蓄があるよ。

教訓#1:例外仕様を決して書いてはならない。
教訓#2:空の例外仕様は除くが、私があなたなら、それさえも避けるだろう。
477デフォルトの名無しさん:2006/11/16(木) 21:09:10
>>476
ゴメン・・
含蓄kwsk
478デフォルトの名無しさん:2006/11/17(金) 10:39:58
質問なんですが、

char型、string型でもいいのですが、
文字列から特定の文字だけを全部削除できる関数はあるんでしょうか?
aaaabbbaaaabbbaaaaa

aaaaaaaaaaaaa
という風にです。
479デフォルトの名無しさん:2006/11/17(金) 10:51:20
remove_if()とerase()を組み合わせれば出来る

#include <iostream>
#include <string>
#include <algorithm>
#include <functional>

int main()
{
std::string s = "aaaabbbaaaabbbaaaaa";
std::cout << s << std::endl;

s.erase(std::remove_if(s.begin(), s.end(), std::bind2nd(std::equal_to<char>(), 'b')), s.end());
std::cout << s << std::endl;
}
480デフォルトの名無しさん:2006/11/17(金) 10:52:46
std::bind_2nd〜の部分を別に関数オブジェクトに持てば、もっと
複雑な削除条件も簡単に書ける。

boost::bindで何としても一行で済まそうという傾向もありますが
481デフォルトの名無しさん:2006/11/17(金) 10:57:17
>>479
remove() でいいだろ。
482478:2006/11/17(金) 10:59:03
ありがとうございました☆
解決しました
483デフォルトの名無しさん:2006/11/17(金) 11:14:02
>>481
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void main()
{
string s = "aaaabbbaaaabbbaaaaa";
remove(s.begin(), s.end(), 'b');
cout << s << endl;
}
結果:aaaaaaaaaaaabaaa
remove()だけだと削除しきれない。
484デフォルトの名無しさん:2006/11/17(金) 11:23:45
>>483
うむ。 erase() も要るな。
485デフォルトの名無しさん:2006/11/17(金) 11:25:40
>>483 void main() 氏ね
486デフォルトの名無しさん:2006/11/17(金) 13:10:35
何故。
487デフォルトの名無しさん:2006/11/17(金) 13:19:24
戻り値型がvoidのmain関数なんて規格には無い
488デフォルトの名無しさん:2006/11/17(金) 13:22:00
はいはい規格規格
489デフォルトの名無しさん:2006/11/17(金) 13:24:53
まあmainは一箇所だけ直せばいいからなw
490デフォルトの名無しさん:2006/11/17(金) 13:57:17
悪い。483です。void main()は完全なる間違いです。すみません。はい。
491デフォルトの名無しさん:2006/11/17(金) 14:59:22
と思ったら私のはちゃんとint main()になってたか・・・・void mainは別人ですた。

remove()でもいいですね。remove_if()をわざわざ使ったのは、例えば
'b'が2回現れた後は'c'も削除せよ、というような場合に便利ですね。

今回はremove()だけでいいみたいです。
492デフォルトの名無しさん:2006/11/17(金) 15:20:42
何行かの改行されたファイルを文字数を指定して、
文字列を取り出していきたいんですけど、どうしたらいいでしょうか?
493デフォルトの名無しさん:2006/11/17(金) 16:03:51
>>492
無視する文字は改行文字だけ?ホワイトスペース文字全般?
494デフォルトの名無しさん:2006/11/17(金) 16:14:11
改行だけの方法と、
ホワイトスペースも無視する方法のふたつをお願いします。
495デフォルトの名無しさん:2006/11/17(金) 17:14:22
>>494
#include <iostream>
#include <fstream>
#include <string>

int getsome(std::ifstream& fs, std::string& s, int n);
int getwows(std::ifstream& fs, std::string& s, int n);

int main()
{
std::ifstream fs("ws.txt");
std::string s;

int n = getsome(fs, s, 10); // 改行文字のみを無視
std::cout << n << "文字: \'" << s << '\'' << std::endl;

fs.seekg(0, std::ios::beg);
s = "";
n = getwows(fs, s, 10); // ホワイトスペース文字を無視
std::cout << n << "文字: \'" << s << '\'' << std::endl;
}

int getsome(std::ifstream& fs, std::string& s, int n)
{
char c;
int i = 0;

while (i < n && fs.get(c))
if (c != '\n') {
s += c;
i++;
496デフォルトの名無しさん:2006/11/17(金) 17:15:32
}

return i;
}

int getwows(std::ifstream& fs, std::string& s, int n)
{
char c;
int i = 0;

while (i < n && fs >> std::ws >> c) {
s += c;
i++;
}

return i;
}

getsome()が改行文字のみを無視、getwows()はホワイトスペース文字を
全て無視します。
497デフォルトの名無しさん:2006/11/17(金) 17:16:17
なおテストに使ったファイルの内容は
---- ws.txt ----
1234





56

78

90
[EOF]
498デフォルトの名無しさん:2006/11/17(金) 17:26:10
ありゃ
>>497には所々文字列の前に' 'とかタブ文字を入れて見て下さい。
499494:2006/11/17(金) 17:29:05
なるほど。get()を使うんですか!
問題を解決する事ができました!
ありがとうございます!
500デフォルトの名無しさん:2006/11/17(金) 18:57:47
void main(void){return;}
501デフォルトの名無しさん:2006/11/17(金) 22:19:28
main(argc,argv)char**argv;{return 0;}
502デフォルトの名無しさん:2006/11/18(土) 00:03:24
char* main(argc,argv)char**argv;{return argv[0];}
503デフォルトの名無しさん:2006/11/18(土) 01:24:38
public static void main(string[] hoge)
504デフォルトの名無しさん:2006/11/18(土) 01:56:27
int main[] = { -61 };
505デフォルトの名無しさん:2006/11/18(土) 02:25:43
class m
{
public:
virtual int main( int argc, char **argv );
};
506デフォルトの名無しさん:2006/11/18(土) 03:43:05
クラスaをmain.cppから分離したいとき、
ヘッダファイルa.hひとつで
class a{
void hoge(){
return 0;
}
};
という感じで定義も記述して、a.cppファイルを作らないのってよくないんでしょうか?
修正があったときhファイルとcppファイルをいじらなきゃならないのが嫌なので…。

今ぶちあたってる問題として、お互いのstaticなメンバ関数を
お互いが使うような二つのクラスがあるときは宣言と定義を分けないとどうしようもないようなのですが。
507デフォルトの名無しさん:2006/11/18(土) 03:51:52
>>506
ヘッダファイルには宣言だけ
cppに定義部を書く
508デフォルトの名無しさん:2006/11/18(土) 04:45:10
俺は面倒だから大体ヘッダファイルに書いてしまうな。
やはりコンパイル時間は遅くなりそうだが。
ちなみにテンプレートを使ってるとヘッダファイルしか使えないよな。
509デフォルトの名無しさん:2006/11/18(土) 05:32:09
毎日コンパイルしてテストしろ
という時代だからな
boostがちょろっと更新されるだけで
pimplパターンなんて水の泡だ
やるだけ無駄
510デフォルトの名無しさん:2006/11/18(土) 09:33:34
>>508
コンパイル時間より、コードの肥大化の方を心配した方がいい
511デフォルトの名無しさん:2006/11/18(土) 11:53:22
>>508
C++的にはexportつかえばヘッダに書かなくても大丈夫だよ!
512デフォルトの名無しさん:2006/11/18(土) 11:56:59
>>511
ちゃんと使えるコンパイラってどれがあるの?
513デフォルトの名無しさん:2006/11/18(土) 12:56:24
糞VCはサポートしていないね。
514デフォルトの名無しさん:2006/11/18(土) 14:04:47
exportって一部のコンパイラしかサポートしてないって聞くけど、
実際のところサポートしてるコンパイラって何てやつ?
515デフォルトの名無しさん:2006/11/18(土) 14:15:35
516デフォルトの名無しさん:2006/11/18(土) 14:32:16
Comeauはフロントエンドだけだがお値段が$50、ただし製品ページのjavascriptがウザ過ぎる。
Borlandのってどう?

517デフォルトの名無しさん:2006/11/18(土) 14:48:10
exception C++ Style読んだら分かるけど、
exportがあっても何も解決しないっぽいよ。
518デフォルトの名無しさん:2006/11/18(土) 15:42:49
まじすか
519デフォルトの名無しさん:2006/11/18(土) 15:45:08
その辺りはD言語では改善されてるのかな。
次期C++ではどうなの?
520デフォルトの名無しさん:2006/11/18(土) 22:38:24
>>514
寡聞にして知らん。
糞GCCもずっと長いことサポートしてなかったと思うが、4.0系移行はサポートしたのか?
521デフォルトの名無しさん:2006/11/18(土) 23:20:57
そういや時期BCCはexportサポートするとかしないとか言ってた気がするが、結局どうなったんだっけ
522デフォルトの名無しさん:2006/11/19(日) 01:13:56
何にせよ宣言と定義で二回書かなきゃならないめんどくささはなんとかならんもんだろーか?
c#だと楽だよね
523デフォルトの名無しさん:2006/11/19(日) 01:18:34
>>522
UMLソフトでクラスしこしこ作ればそのへんは
骨だけは作ってくれるぞ
524デフォルトの名無しさん:2006/11/19(日) 03:00:44
そこで全部ヘッダにぶちまけですよ
525デフォルトの名無しさん:2006/11/19(日) 03:17:13
インターフェースクラスだけをヘッダに書いて、それを継承する実装クラスはcppにベタ書きとか結構やる。
526デフォルトの名無しさん:2006/11/19(日) 03:29:21
それだとその実装クラスを他のソースで使えない?
527デフォルトの名無しさん:2006/11/19(日) 04:26:56
実装へのポインタをインターフェースへのポインタとして晒していれば使わなくていい。
528デフォルトの名無しさん:2006/11/19(日) 09:51:20
template<class T> class MYCLASS {
...
};

こういうクラスがあって、実体化するときに以下の用に書きますがが、

MYCLASS<A> myclassA;
MYCLASS<B> myclassB;

こうかける方法を教えてほしいです。

MYCLASS myclassA;
MYCLASS myclassB;

このときTは、それぞれA, Bに死体です。
529528:2006/11/19(日) 09:57:35
すいません。間違いました。もう一回最初から書きます。

template <typename T> class MYCLASS {
T* a;
MYCLASS(T* t) : a(t) {}
};

こういうクラスがあって、実体化するとき以下のように書きますが、
A a;
MYCLASS<A> my1(&a);
B b;
MYCLASS<B> my2(&b);

以下のように書きたいです。
A a;
MYCLASS my1(&a);
B b;
MYCLASS my2(&b);

このときTは、それぞれA, Bに死体です。
530デフォルトの名無しさん:2006/11/19(日) 09:59:54
そうですか。
531デフォルトの名無しさん:2006/11/19(日) 10:12:53
class MYCLASS {
boost::any a;
template<typename T>
MYCLASS(T* t) : a(t) {}
};
532528:2006/11/19(日) 10:19:01
>531
ありがとう、boostインストールしてきます。
533528:2006/11/19(日) 12:37:45
boostインストールして、531を試したんですが、
デストラクタでTが使えないってエラーがでるんですが、
これは無理なんでしょうか?

class MYCLASS
{
boost::any a;

template<class T>
MYCLASS(T* t) : a(t) {}

template<class T>
~MYCLASS() {
cout << sizeof(T);
}
}
534デフォルトの名無しさん:2006/11/19(日) 13:52:02
>>533
無理。 T を決める方法が無い。
何がしたいんだ?
535528:2006/11/19(日) 14:29:55
MYCLASSのデストラクタでTのデストラクタを呼びたいです。
536デフォルトの名無しさん:2006/11/19(日) 14:30:35
>>535
何もしなくても呼ばれるだろ?
537528:2006/11/19(日) 14:44:10
呼ばれないと思います。コンストラクタで渡してるのは
T*なので
538デフォルトの名無しさん:2006/11/19(日) 14:45:38
これでどうかね?
template<class T>
MYCLASS(T* t) : a(*t) {}
539528:2006/11/19(日) 15:02:46
それで呼ばれるデストラクタはコピーされたTだと思いますが、
元々渡されたtのデストラクタを呼んで解放したいです。

529の例がスタック上のインスタンスになってるんですが、
実際はこういう風には使わないで、newしたものを渡します。
540デフォルトの名無しさん:2006/11/19(日) 15:07:05
class MYCLASS
{
boost::shared_ptr< void > p;

public:
template<class T>
MYCLASS(T* t) : p(t) {}
};

型が消えてるから MYCLASS 内で有用な仕事ができないとは思うけれど
541デフォルトの名無しさん:2006/11/19(日) 15:08:41
>>539
デストラクタじゃなくて呼ぶのdeleteじゃね?

とりあえずスマートポインタだと無駄に重装備っぽいので関数ポインタ使ってみた
class MYCLASS{
    MYCLASS(const MYCLASS&);
    MYCLASS&operator=(const MYCLASS&);
    void*ptr;
    void(*delfn)(void*);
public:
    template<class T>MYCLASS(T* t) : ptr(t),delfn(deleter<T>){}
    ~MYCLASS(){delfn(ptr);} 
};
542541:2006/11/19(日) 15:10:46
おっと忘れてたこれも宣言する
template<typename T>
static void deleter(void*p){delete (T*)p;}
543528:2006/11/19(日) 15:19:31
>>540-542
ありがとうございます。難しそうなのでじっくり調べてみます。

>デストラクタじゃなくて呼ぶのdeleteじゃね?
そうですdeleteです。わかりずらくてすいません。

544デフォルトの名無しさん:2006/11/19(日) 15:33:43
bbbの関数がaaaの動的なメンバにアクセスするにはどうすれば良いんですか。

class aaa{
  int v;
  class bbb{
    void func(int x){
      v+=x;  //コンパイルエラー
    }
  }b;
};
545デフォルトの名無しさん:2006/11/19(日) 15:46:30
>>544
aaa のインスタンスを渡せ。
546デフォルトの名無しさん:2006/11/19(日) 15:52:25
GCCのトランポリンじゃないんだから。

#include <iostream>
using namespace std;
class aaa {
  int v;
  class bbb {
    int& v;
  public:
    bbb(int& w) : v(w) {}
    void func(int x) { v += x; }
  } b;
public:
  aaa(int init=0) : v(init),b(v) {}
  int get_v(int e) { b.func(e); return v; };
};

int main(void)
{
  aaa uho;
  cout << uho.get_v(12) << endl;
  cout << uho.get_v(2) << endl;
  return 0;
}
547デフォルトの名無しさん:2006/11/19(日) 15:58:05
どっかでみたなこれ

((aaa*)(reinterpret_cast<volatile char*>(this) - offsetof(aaa,b)))->v += x;
548デフォルトの名無しさん:2006/11/19(日) 16:45:01
>>545-548
arigatougozaimasu
549デフォルトの名無しさん:2006/11/19(日) 17:01:04
>>549
iie douitasi masite
550デフォルトの名無しさん:2006/11/20(月) 00:17:18
一度アップキャストした型を
確実に型情報が解っているときはどのキャストで戻すべきなのですか?
551デフォルトの名無しさん:2006/11/20(月) 00:36:44
static_cast
552デフォルトの名無しさん:2006/11/20(月) 00:37:14
>>550
static_cast で一応可能。でも不正な関係のポインタを渡して死ぬのは
プログラマの責任。 dynamic_cast なら実行時にチェックが行われる。
553デフォルトの名無しさん:2006/11/20(月) 00:55:04
そこでboost::polymorphic_downcastですよ。
554デフォルトの名無しさん:2006/11/20(月) 01:20:21
boost紹介する奴はどんな機能があるのか説明してほしい
555デフォルトの名無しさん:2006/11/20(月) 01:28:16
>>554 ドキュメント嫁
556デフォルトの名無しさん:2006/11/20(月) 02:06:39
557デフォルトの名無しさん:2006/11/20(月) 02:58:09
>>554
確かに>>553みたいな紹介するやつ(+>>555みたいなやつ)がよくいるけどこーゆーboost厨はうざいだけだよなぁ。
558デフォルトの名無しさん:2006/11/20(月) 08:00:43
boost厨は好きだよ
俺もboost厨だから。
ただ

boost;;XXX使え

とかで終わる発言は投げっぱなし感が強くて嫌だわ
559デフォルトの名無しさん:2006/11/20(月) 09:22:26
何も知らない自分に手厚い説明をつけてくれない奴には
痛い・うざい・キモイのレッテルを貼らないと気が済まないよね。
自助努力なんて要求してくる奴は人として許せないよね。
560デフォルトの名無しさん:2006/11/20(月) 09:49:30
ていうかね、「次期標準候補」と「標準」では、雲泥の差があるのよ。
どこまで取り込まれるかもわからないし、
標準で規定されたわけじゃないから、仕様の変更も充分にありうるわけ。
(仕様も改定される可能性があるけどね)

例えば、POSIXで標準化されていても、C++の標準に含まれないものは
このスレでは範囲外としているでしょ。
もちろんアドバイス的なことは出来ても
ディレクトリの一覧なんかは、「標準C++では出来ない」が答えだし。


そういうのを、「標準じゃないけど」等の前置きなしに
当然のように書き込むから、嫌がる人が居るのよ。
561デフォルトの名無しさん:2006/11/20(月) 10:13:16
過去ログを boost で grep してから言え。
562デフォルトの名無しさん:2006/11/20(月) 10:31:08
>>560
お前だけ全然切り口が違うな。
「boost::XXX使え」が「標準じゃないけどboost::XXX使え」に変わっても
>>553>>557は何も満足しないだろうし。

>>553>>557は単に、自助努力を強いられてムカついちゃってるボクちゃん。
563デフォルトの名無しさん:2006/11/20(月) 21:19:18
>>553はただのスレ違い雑談だろ。そこからこんだけ荒れてんだから
テンプレに「荒れるからboostの話題禁止」って入れてもいいと思うんだが
まぁ誰も賛成しないよな
564デフォルトの名無しさん:2006/11/20(月) 21:28:20
popenのような関数C++にはないですか?
popenが必要な時にはCのioを使わなければなりませんか?
565デフォルトの名無しさん:2006/11/20(月) 21:34:35
なんか見覚えがあるな。
566初心者:2006/11/20(月) 21:53:10
C++でハッキングを作るにはどうすればよいですか?

注:私の質問に対して煽りで返す不届き者がいるようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
ちなみに私の友達には2ch管理者さえも畏れるハッカーがおり、
あまりにも礼を欠く発言に対してはそれ相応の「処置」をとらせていただくことを
ご承知下さい。なお、質問に対して有意義な答えを下さった方には
感謝します。
567デフォルトの名無しさん:2006/11/20(月) 21:55:44
>>566
きみの友達の方が詳しいからそっちに聞いた方が良いと思うよ。
568デフォルトの名無しさん:2006/11/20(月) 21:56:11
あれ?いまって秋だよね?まだ冬休みじゃないよね?
あれ夏休みでもないしなぁうーん異常気象で頭がおかしくなったんかな
569デフォルトの名無しさん:2006/11/20(月) 22:00:22
プログラミングでいう「ハック」とは、「いかに少ない時間で巧妙に作るか」である。
再帰やSTL勉強しなさい。
570初心者:2006/11/20(月) 22:01:10
>>567
やはり自力でやらなければ意味がないのでここで質問しました。
出来ればもっと有意義なレスを期待します。

>>568
現れましたね、私が質問しているのに関係ない雑談を始める人が。
私は心が広いので寛容な心で許容しますが、今後このようなことが
あった場合当方では責任を負えませんのでご了承お願いします。
571デフォルトの名無しさん:2006/11/20(月) 22:02:44
本当にネジどっかいっちゃた人が迷い込んできたなw
さてさてどうなることやらw
572デフォルトの名無しさん:2006/11/20(月) 22:03:28
ハッキングは動詞です><
573デフォルトの名無しさん:2006/11/20(月) 22:04:25
>>570
こちらへどうぞ↓

【初心者歓迎】C/C++室 Ver.32【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1160893851/
574デフォルトの名無しさん:2006/11/20(月) 22:06:02
>>570
おめぇにはVip板がお似合いじゃ
さっさと消えろ
575初心者:2006/11/20(月) 22:07:39
>>573
初心者と名乗っているのはあくまでも謙遜してのことであり、
そのスレッドは私の質問に対してはレベルが低すぎると判断して
このスレに書き込んだわけですが・・・
その辺を出来れば察してくれるとうれしいです。

>>574
VIP板はレベルが低いので私には合わないと思われます。
私のレベルはこのスレの平均よりやや上なので話が合うと思いこのスレに現れました。
576デフォルトの名無しさん:2006/11/20(月) 22:09:11
ようするにかまってちゃんなんだw
577初心者:2006/11/20(月) 22:10:16
もういいです。
皆さんにはそれなりの制裁を下すのでそのつもりでいてください。
578デフォルトの名無しさん:2006/11/20(月) 22:11:15
>>570
>自力でやらなければ意味がない

いや、だからこそ、その友達に色々聞いて自分でプログラム組めばいいんじゃない?
579デフォルトの名無しさん:2006/11/20(月) 22:12:18
どのつもりよw
580デフォルトの名無しさん:2006/11/20(月) 22:12:46
>>577
「制裁を下してもらう」の間違いだろwww
581初心者:2006/11/20(月) 22:13:19
ふざけないで下さい。
さっきは脅しのつもりでしたがもう容赦しません。
582デフォルトの名無しさん:2006/11/20(月) 22:14:04
> やはり自力でやらなければ意味がないので
自力でやれよ
583デフォルトの名無しさん:2006/11/20(月) 22:15:00
>>581
「ふざけないで下さい」と言っているわりには人に物を頼む態度じゃないね。
584デフォルトの名無しさん:2006/11/20(月) 22:16:17
>>581
おまえズボン脱がしてトイレに頭突っ込むぞ?(笑
585初心者:2006/11/20(月) 22:16:40
ちなみに私はパケットを打ち出すスキルがあります。
インターネット上においてこのスキルがどういう意味を持つか、
多少なりとも知識のあるみなさんにはわかることでしょう。
ぜひ、賢明な判断をお願いいたします。
586デフォルトの名無しさん:2006/11/20(月) 22:16:44
>>581
折角 >>578 が有意義なレスをしてくださっているのに、無視しましたね。
ふざけないで下さい。もういいです。
587初心者:2006/11/20(月) 22:17:11
これだから日本人は朝鮮民族の足元にも及ばないんです。
祖国にはあなた達のパソコンをハッキングする人が沢山居ます。覚悟していてください。
588デフォルトの名無しさん:2006/11/20(月) 22:18:04
ああ、ウンコ民族だったかwww
589デフォルトの名無しさん:2006/11/20(月) 22:18:05
ほかしときゃいいものを全くお前らときたら…
590初心者:2006/11/20(月) 22:18:39
ほかすって九州の方言?
591デフォルトの名無しさん:2006/11/20(月) 22:19:24
久々に爆笑させてもらった。
まさか釣りだったとは。
592デフォルトの名無しさん:2006/11/20(月) 22:19:29
なーんだやっぱり朝鮮人か
593デフォルトの名無しさん:2006/11/20(月) 22:19:55
>>591
明らかに釣りじゃん。
594デフォルトの名無しさん:2006/11/20(月) 22:20:01
ニダ民か
595デフォルトの名無しさん:2006/11/20(月) 22:23:17
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
>ハッキングを作る
596デフォルトの名無しさん:2006/11/20(月) 22:23:42
キューピー3分間ハッキング
597デフォルトの名無しさん:2006/11/20(月) 22:23:45
愛用していたC++コンパイラに2時間と10分餌を与えないでいたら死んでしまいました。
どうすれば生き返るんでしょうか。
598デフォルトの名無しさん:2006/11/20(月) 22:24:44
あきらめて新しいのもってこい。
599564:2006/11/20(月) 22:29:30
お願いします
600デフォルトの名無しさん:2006/11/20(月) 22:32:58
#include <cstdio>
でいいじゃん
601デフォルトの名無しさん:2006/11/20(月) 22:34:24
#include <cstdio>
602デフォルトの名無しさん:2006/11/20(月) 22:36:38
しゃーぷいんくるーどかくかっこしーえすてぃーでぃーあいおーかくかっことじ
603557:2006/11/20(月) 22:45:30
>>562
「標準だけじゃできないんだけど、boost::XXXならなんとかなるよ」的な回答なら気にしないけどなぁ。
>>558 も言ってるように投げっぱなし感の強い発言であり、且つ
>>560 も言ってるように標準でもないものをさも当然のように言うから引っかかる。

boostが標準なら「boost::XXX使え」でも全然気にならない。
604デフォルトの名無しさん:2006/11/20(月) 23:00:52
はーいはーい

しゅーりょー。
次の話題いこうぜ
605デフォルトの名無しさん:2006/11/20(月) 23:04:30
>>564
popen()ということで、UNIX限定でいいのかな?

popen()すると、FILE *が返ってくる。
多くのC++ iostream library@UNIXでは、
FILE *を引数に取るコンストラクタが用意されているので、それを使えばいい。
int(file descriptor)を引数に取る物しかなければ、fileno()でFILE *→intすればいい。
606デフォルトの名無しさん:2006/11/20(月) 23:05:31
で、詳しくはあなたの使っているUNIXのスレで聞いた方がいいな。
UNIX板か、Linux板の。
607デフォルトの名無しさん:2006/11/20(月) 23:20:00
vectorで任意の要素のイテレーターを取得するにはどうすれば良いですか。
608デフォルトの名無しさん:2006/11/20(月) 23:27:25
>>607
vector<...>::iterator i = hoge.begin();
advance(i, index);
確か、こんなんでできなかった?
609デフォルトの名無しさん:2006/11/20(月) 23:27:41
>>607
begin() + n
610デフォルトの名無しさん:2006/11/21(火) 00:24:30
荒しと不親切厨を切るのは構わないけど、boostとmetaprogrammingを
切るのは勘弁してくれ……
611デフォルトの名無しさん:2006/11/21(火) 00:55:18
boostのコンポーネントで解決できる事ならそれが一番いいことが多いしな
612デフォルトの名無しさん:2006/11/21(火) 01:17:11
>>611
だからそこからして意見が食い違ってんだって。
boost厨からしたらboostは事実上標準なのかもしれんが、
boost厨以外のヤツからしたらboostは標準でもなんでもないの。
え? boostって標準だろ?
614612:2006/11/21(火) 01:21:20
ちょっと言葉足らずだったような気がするので追記。

boost厨じゃないヤツからしたら標準でもないものをひとつやふたつの問題を
解決するためだけに導入するのは馬鹿げてることなの。
615612:2006/11/21(火) 01:23:02
>>613
`Д´)ノ だから標準じゃねーつってんだろうが!
616デフォルトの名無しさん:2006/11/21(火) 01:26:37
一言「boost以外で」って入れればいいんじゃ?
617デフォルトの名無しさん:2006/11/21(火) 01:27:21
boost に適切なコンポーネントがあるのに自作するほうが馬鹿げてるんじゃないの?
なんかいいことあるのか?
618デフォルトの名無しさん:2006/11/21(火) 01:29:12
まあ、そこまで詮索するこっちゃない
619デフォルトの名無しさん:2006/11/21(火) 01:31:57
>適切なコンポーネントがあるのに自作するほうが馬鹿げてるんじゃないの?

その点には別に異論はない。
620デフォルトの名無しさん:2006/11/21(火) 01:42:18
>>617
仕事などでboostを導入できない環境というのもあるんじゃない?
621デフォルトの名無しさん:2006/11/21(火) 01:44:36
何回やるんだこの話題。こっちでやんな。
622デフォルトの名無しさん:2006/11/21(火) 01:45:21
boost専用スレがあるだろうが!
623デフォルトの名無しさん:2006/11/21(火) 01:49:25
bootsスレもあるぞ!w
624デフォルトの名無しさん:2006/11/21(火) 02:01:42
別にboostを否定することなかろうに。boost以外の方法も否定しないけど。

確かにboost以外NGとかいうboost厨は要らんな。
625デフォルトの名無しさん:2006/11/21(火) 02:07:55
boostって一口に言っても巨大すぎで個々のコンポーネントの出来もピンキリ、
魅力的なコンポーネントが多いのは確かなので使い倒したくはあるも、
中にはアカデミックなばかりで実用性皆無な変態ハッタリコンポーネントなんかも
跳梁してたりするわけで、業務で使うには慎重になりたいところだが、
そうなると相応に現在の実装状況その他boost内部事情に詳しくならねばならず、
そんな暇あったら仕事しろやゴルァと怒られることしきり

まー、あれだよ。
時間のあるスキモノの人は、気の乗った範囲で構わんので
知識を還元してくれると、ちょっぴり嬉しいですよ。
ウザがられない程度に。
626デフォルトの名無しさん:2006/11/21(火) 02:09:12
>>625
つまみ食いすればいいのに。
627デフォルトの名無しさん:2006/11/21(火) 02:09:18
>>623
まだあんのかよw
628帰ってきた初心者:2006/11/21(火) 02:24:30
Boostというものでハッキングをしたいのですがどのリンカでコンパイルすればいいのでしょうか?

注:私の質問に対して煽りで返す不届き者がいるようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
ちなみに私の友達には2ch管理者さえも畏れるハッカーがおり、
あまりにも礼を欠く発言に対してはそれ相応の「処置」をとらせていただくことを
ご承知下さい。なお、質問に対して有意義な答えを下さった方には
感謝します。
629デフォルトの名無しさん:2006/11/21(火) 02:27:41
>>628
不可能
630デフォルトの名無しさん:2006/11/21(火) 02:33:38
>リンカでコンパイル
うん。確かに不可能だw
631デフォルトの名無しさん:2006/11/21(火) 03:22:22
>>628
BoostするにはPanstが必要だ。
632デフォルトの名無しさん:2006/11/21(火) 08:22:45
boost禁止にしても、boost全面OKにしても荒れるのは荒れるだろうし、
個々の局面で適切な答えかどうか判断するしかないんじゃないの?

>>625のいうようにboostの中にはトンデモなやつから、
滅茶便利なものまであるからさ。

解答者が「標準で」と限定している場合は除いて、
boostならこういう風に簡単に解決できるというレスがあるのは、
質問者にもスレ住民にも有益だと思う。
633デフォルトの名無しさん:2006/11/21(火) 09:02:45
「標準で」と限定している場合でも、
boostはこういう風に標準の上に実装しているというのを示すのは有意義だと思う。

boostは単に便利なだけじゃなくて、ソースを見て勉強するのにも使えるわけだし。

ただ、教科書を渡して「これ見て一人で勉強して」と言い放つようなレスばっかりだと見ている側としてもつまんないよね。

結局>>554 >>557 の言うように紹介の仕方が不味いということなんだと思うんだけど、どうよ。
634デフォルトの名無しさん:2006/11/21(火) 09:41:52
>>633
>「これ見て一人で勉強して」と言い放つようなレスばっかり

そんなレスどこにもないぞ
635デフォルトの名無しさん:2006/11/21(火) 10:22:51
>>633
同じコンポーネント紹介するのにいちいち解説書き込んでたら
おんなじレス繰り返すことになるのがわからんのかね?
公式のドキュメントのほうが詳細で正確なんだし、読むために特別なコストが
かかるわけでもない。コンポーネントの名前を落としてさえ行けば十分だろ。
636デフォルトの名無しさん:2006/11/21(火) 11:07:08
1行レスするから議論になる。
議論したいなら別だが、そうでないなら少し工夫するだけでいいだろ。

と思ったが、>553で充分ジャマイカ。それ以上何が要るんだ?
637デフォルトの名無しさん:2006/11/21(火) 11:12:42
>>635
コンポーネントの詳細な解説なんてそりゃ要らないだろ。
今の話題とそのコンポーネントがどう関係するのかくらいは書けって話じゃね?

それにしてもpolymorphic_downcastはコードの意味を明確にするのにはいいかもね。
ttp://boost.cppll.jp/HEAD/libs/conversion/cast.htm
638初心者:2006/11/21(火) 11:26:59
分不相応な人がレスを返してるのが原因ではないでしょうか?
質問する人、答える人が双方高度な意識を持ち、有意義な質疑応答
をすることが必要だと考えます。そのための啓蒙文をVer2
にアップグレードしました。今後は各自の発言の最後にコピーアンドペスート
することが要求されます。

以下、啓蒙文Ver2.0
注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。
639デフォルトの名無しさん:2006/11/21(火) 11:29:37
初心者は初心者スレへどうぞ。
640デフォルトの名無しさん:2006/11/21(火) 11:40:39
>今後は各自の発言の最後にコピーアンドペスートすることが要求されます。
誰が誰に要求されてるんだろう?

>質問に対して有意義な答えを下さった方にはちゃんと評価しますので安心しましょう。
なんで質問してる方が偉そうなんだよ。

「初心者」ってのは「(日本語の使い方が)初心者」ってことなんだろうな。
641デフォルトの名無しさん:2006/11/21(火) 11:43:23
>639
だ〜か〜ら〜
1行レスで
返すなって
言ってん
だろうが!

↓これも付けてね
以下、啓蒙文Ver2.0
注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。
642デフォルトの名無しさん:2006/11/21(火) 11:46:28
>>641 邪魔だ。早く消えろ。
643デフォルトの名無しさん:2006/11/21(火) 11:52:44
>レスで返す

馬から落馬すると同レベルだなw
644デフォルトの名無しさん:2006/11/21(火) 11:54:30
無駄に煽るな。スルーしる。
645デフォルトの名無しさん:2006/11/21(火) 12:00:32
boostを薦めるの禁止。
これからはboostなら一発でおkという場面は全部
「無いから自作しろ」と回答しよう。
646デフォルトの名無しさん:2006/11/21(火) 13:01:58
なんか100近く進んでると思ったらこれか('A`)
なんだってこうなるんだ…… 
647デフォルトの名無しさん:2006/11/21(火) 13:59:29
  t  e  s  t
648デフォルトの名無しさん:2006/11/21(火) 18:10:13
そしてboostが標準になったころに乗り遅れるお前らぷぎゃー
649デフォルトの名無しさん:2006/11/21(火) 20:34:42
お前はそんなにスレを荒らしたいのか
650デフォルトの名無しさん:2006/11/21(火) 22:12:10
booooooooooooooooost
651デフォルトの名無しさん:2006/11/21(火) 22:52:32
boo+st
652デフォルトの名無しさん:2006/11/21(火) 22:54:45
やぁ、こんにちわ。
どうです、釣れてますかな?
653デフォルトの名無しさん:2006/11/21(火) 23:38:22
booooooooooooooooots
654デフォルトの名無しさん:2006/11/21(火) 23:43:57
遊神プートス
655デフォルトの名無しさん:2006/11/22(水) 00:03:17
何でこんなにスレ育ってるんだ?
今来た俺に3行で頼む。
656デフォルトの名無しさん:2006/11/22(水) 00:04:46
VIP

657655:2006/11/22(水) 00:11:09
>>656
解決しました!
658デフォルトの名無しさん:2006/11/22(水) 01:20:20
サバッシュktkr
659デフォルトの名無しさん:2006/11/22(水) 14:47:31
以下、啓蒙文Ver2.0
注:有意義な質問に対して煽り、1行レスで返す方が多いようですが、
そのような方は発言するだけ無駄ですのでお黙り下さい。
また質問者に対するあまりにも儀礼を欠いた回答レスもお断りいたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、質問に対して有意義な答えを下さった方には
ちゃんと評価しますので安心しましょう。

これテンプレに入れよう
660デフォルトの名無しさん:2006/11/22(水) 14:58:56
>>659
ウザ('A`)
それ答える側も全く同じなんだけど。
661デフォルトの名無しさん:2006/11/22(水) 15:19:31
>>659
もうちょっと日本語の勉強をしましょうね。
突っ込みどころが満載。
662デフォルトの名無しさん:2006/11/22(水) 18:54:48
誘導
BOOTSを語れゴラァ part2
http://pc8.2ch.net/test/read.cgi/tech/1139266461/
663デフォルトの名無しさん:2006/11/22(水) 19:08:35
よりによってBOOTSスレかよ。
664デフォルトの名無しさん:2006/11/22(水) 19:34:32
いつまで残ってるんだろう。bootsスレ(w

665デフォルトの名無しさん:2006/11/22(水) 19:47:58
靴w
666デフォルトの名無しさん:2006/11/22(水) 22:09:30
#include <靴/???>
667デフォルトの名無しさん:2006/11/22(水) 22:11:17
分かった分かった、俺がバイト中に思いついたネタを披露するからお前ら仲良くしる





生std::auto_ptr様の生ポインタ.geeeeeettttt()!!!!
668デフォルトの名無しさん:2006/11/22(水) 23:35:03
今日は冷え込みますね。
669デフォルトの名無しさん:2006/11/22(水) 23:50:25
>>668
ニホンジンはドウシテイツモ、冷え込みますねッテイウカナ?
モウ十二月チカイカラ、ヒエルノアタリマエデスネ!ハハハハハ!

って隣のパキスタン人が言ってた。
670デフォルトの名無しさん:2006/11/23(木) 00:34:26
何を言ぅ!
671デフォルトの名無しさん:2006/11/23(木) 00:59:25
俺の隣のサイヤ人はなんか知らんけどわくわくしてた。
672デフォルトの名無しさん:2006/11/23(木) 09:46:00
#include <靴/sprits>

using 靴::sprits::adidas
673デフォルトの名無しさん:2006/11/23(木) 10:12:09
classのstaticなメンバ関数は、インターフェイスをヘッダに書いて定義は別のファイルにする事が出来ないんでしょうか。
ネットを漂っていても、class内に直接書くものしか見ません。

=== header ===
class foo{
inline static int x2(int val);
};
=== cppfile ===
int foo::x2(int val){
return val*2;
}
とした所"inline static int x2(int)は定義されていません"とwarnigをくらいました。
674デフォルトの名無しさん:2006/11/23(木) 10:14:37
static じゃなくて inline の方が問題
675デフォルトの名無しさん:2006/11/23(木) 10:46:20
inlineは分けて書いちゃダメ。
676デフォルトの名無しさん:2006/11/23(木) 13:13:10
        ___
    /´. _, -―-、ヽ、
  ./  l´[☆ィTfヘマ、 ヽ
 |  | |ィケリノ |ト}!l|
 | _| レァ予  伝yリ|    ,..、    /
  | fr| 《{_丿   Ljハ‖  _,ノ/`il  /
  | ゞ| |、''  r-ァ ,ツ イイ´  ハ il    お前らまだC++なんて化石使ってるのかよ
 |  | | ,フ 云'I「|{ {::::{   V リ  \
 || N {`ヽー弋イノ`衣√`ヾノ    \
  从 |、 ハ Y.Qヘ\,イ乍}
    `ヽVリ'| !  Y´ア´
        ,| |   「´
        /ヒニリ  `、
     ん{,,,,'〉,、,、,、ゝ
      ┝━┿┥
677デフォルトの名無しさん:2006/11/23(木) 13:23:14
>>676
なぜかワラタ
678デフォルトの名無しさん:2006/11/23(木) 13:53:11
#include <2ch.h>
679デフォルトの名無しさん:2006/11/23(木) 13:55:29
お聞きしたい事があります。

typedef struct _Vec
{
float x, y, z;
_Vec(float x=0, float y=0, float z=0)
{this->x=x;
this->y=y;
this->z=z;}
} Vec;
と言うように宣言して、
Vec v = Vec(1.0,2.0,3.0);

みたいな感じで使うと
typedef struct {
float x, y, z;
} Vec;
Vec v = {
680デフォルトの名無しさん:2006/11/23(木) 13:57:11
};
681679:2006/11/23(木) 13:59:11
上の続きです
間違ってENTER押してしまいました。
Vec v = {1.0, 2.0, 3.0};
に比べてかなり速度が落ちます。

何故なのでしょうか?
operatr *等でも速度が落ちました。

よろしく御願いします。
682デフォルトの名無しさん:2006/11/23(木) 14:02:08
一時オブジェクト作らないようにexpression template使え。
あと初期化リスト使え。
683デフォルトの名無しさん:2006/11/23(木) 14:03:55
最適化されれば変わらなくなりそうなもんだが
684679:2006/11/23(木) 15:35:42
レスありがとうございます。
expression templateについていろいろググってたのですが、
複雑で分からない・・・。
ヒント頂けませんか??
685デフォルトの名無しさん:2006/11/23(木) 15:53:45
>>684
expression template の前に、最適化かけて差が問題になってるかどうか確認しろ。
686デフォルトの名無しさん:2006/11/23(木) 15:54:38
>>679
× typedef struct _Vec {} Vec;
○ struct Vec {};
687679:2006/11/23(木) 16:01:42
>>685
vs2003使ってるのでReleaseではき出したところ早くなりました。
しかし、Debugモードでも早く動くようにしたいです。

>>686
実行速度は変わりませんでした。
688デフォルトの名無しさん:2006/11/23(木) 16:04:24
>>687
コンパイルオプション弄れば
689デフォルトの名無しさん:2006/11/23(木) 16:12:55
>>679
Vec v(1.0, 2.0, 3.0);だとどうなる?
690デフォルトの名無しさん:2006/11/23(木) 16:26:26
>>688
そ、それはちょっと、、、

>>689
変化有りませんでした><
691デフォルトの名無しさん:2006/11/23(木) 16:49:54
>>687
>しかし、Debugモードでも早く動くようにしたいです。

なんで?

>>コンパイルオプション弄れば
>そ、それはちょっと、、、

何が「それはちょっと」なの?意味がわからん
692デフォルトの名無しさん:2006/11/23(木) 16:51:55
>>682
float三要素の構造体にexpression templateなんか使ったら余計に遅くなるよ。
expression templateで出来る一時オブジェクトと大きさが変わらんから。
693679:2006/11/23(木) 16:54:32
>>691
最適化したらデバッグしにくくなるから。


>>692
では、こういう使い方は辞めといた方が良いのでしょうか?
694デフォルトの名無しさん:2006/11/23(木) 17:32:37
2項だけなら変わらんかもな。しかし遅くなるのはコンパイルとコーディングだけだろ。
695デフォルトの名無しさん:2006/11/23(木) 17:32:55
デバッグビルドで速くしたい理由が分からない
696デフォルトの名無しさん:2006/11/23(木) 17:45:02
>>693
上の質問にも答えろ低脳。
697デフォルトの名無しさん:2006/11/23(木) 17:46:01
>>694
実行速度が遅くなるよバカ
698デフォルトの名無しさん:2006/11/23(木) 17:47:05
速くすればデバッグも速く終わると思っている

いや、冗談だ。
699デフォルトの名無しさん:2006/11/23(木) 17:48:56
ベクトルなんてET適用の典型的な例だと思うんだけどなぁ
700679:2006/11/23(木) 17:54:04
えっと、言い忘れましたが、今作っているのがゲームでして、
大量のソースをいちいちデバッグとリリースを繰り返しビルドするのは時間の無駄なんですよ、、
だから、デバッグビルドでも通常の動作をさせたいんです。
701デフォルトの名無しさん:2006/11/23(木) 17:59:48
>>700
まずデバッグビルドとリリースビルドがどう違うのか、その違いによって
それぞれどんな用途に使われるのか知ってればそんなことを望むはずはない。
702デフォルトの名無しさん:2006/11/23(木) 18:03:19
>>700
んなことできるんだったら「デバッグビルド」なんて存在しねーんだよ。

もうすれ違いだから出て行け。
703デフォルトの名無しさん:2006/11/23(木) 18:06:57
>>699
サイズ固定のVectorじゃなければな
704デフォルトの名無しさん:2006/11/23(木) 18:26:36
なんだ、低脳共ばっかりか
705679:2006/11/23(木) 18:47:13
じゃ、どうすればいいか教えてくれお
706デフォルトの名無しさん:2006/11/23(木) 18:58:59
v*pperは家に帰れお( ^ω^)
707デフォルトの名無しさん:2006/11/23(木) 19:03:35
ublas::c_vector<float,3>
708679:2006/11/23(木) 19:51:25
かいけつしたお
709デフォルトの名無しさん:2006/11/23(木) 19:55:07
そりゃよかったな
710デフォルトの名無しさん:2006/11/23(木) 20:02:17
>>679
してないお
711679:2006/11/23(木) 20:03:17
こうだった
712初心者:2006/11/23(木) 20:57:20
各地でスレのモラルが向上したとして大好評につき、啓蒙文をVerUPしました。
以下のレスについては、必ずこの啓蒙文を付け加えましょう。
また、もし啓蒙文がない場合は、暗黙のうちにこの啓蒙文が了承されていると
みなされます。

以下、啓蒙文Ver3.0
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答を
するように。
713デフォルトの名無しさん:2006/11/23(木) 20:58:39
STLスレがメインだからどうでもいいや
714デフォルトの名無しさん:2006/11/23(木) 21:06:25
余計なこと言うな
('A`)STLスレにまで感染したらどうする気だよ
715デフォルトの名無しさん:2006/11/23(木) 21:08:13
>>712
うるせー朝鮮人
祖国に帰れ!
716デフォルトの名無しさん:2006/11/23(木) 21:15:07
テンプレに変なもの書くようなスレだから祟りが起こって当たり前だな
717679:2006/11/23(木) 21:27:17
結局、リリースビルドとデバッグビルドを使い分けろという事でしょうか?
718デフォルトの名無しさん:2006/11/23(木) 21:27:55
まぁ暇だから誰も書き込まないうちは適当に遊んで良いよ。
719デフォルトの名無しさん:2006/11/23(木) 21:28:09
>>717 はい、そうです。
720679:2006/11/23(木) 21:57:55
>>717
承知しました。
ご迷惑おかけしました。
721デフォルトの名無しさん:2006/11/23(木) 23:40:15
うん、まぁわかんないことも多いだろうけど、頑張れ。
722デフォルトの名無しさん:2006/11/24(金) 02:49:36
このスレkusa○a○eが書き込んでるなw
723デフォルトの名無しさん:2006/11/24(金) 02:51:05
>>722
どのあたり?
俺にはkusak○b○っぽい書き込みは見当たらないが…
724デフォルトの名無しさん:2006/11/24(金) 09:38:53
>>723
そういうことにしたいのですね:)
725デフォルトの名無しさん:2006/11/24(金) 11:19:51
おまいら構造体のプレフィックスってどうしてる?

クラスなら C
メンバ変数なら m_
ポインタなら P
文字列なら状況により str

って付けてるけど、構造体は S だと文字列みたいだから、
とりあえず全て大文字にしているけど、おもいらどうしてる?
726デフォルトの名無しさん:2006/11/24(金) 11:24:19
>>725
すれ違い。↓逝け。

コーディング規約 第2条
http://pc8.2ch.net/test/read.cgi/tech/1068752664/
727デフォルトの名無しさん:2006/11/24(金) 12:08:59
>726
逝ってくる
728デフォルトの名無しさん:2006/11/24(金) 12:15:57
>>725
そんなものつけない。
729デフォルトの名無しさん:2006/11/24(金) 16:19:56
visual studio2005使ってるんですが、
long longって32ビットマシンだと32ビットのintとして振舞うんでしょうか?
遅くても64ビットintとして動いてくれたりはしないのですか?
730デフォルトの名無しさん:2006/11/24(金) 16:21:57
>>729
あり得ないだろ
731デフォルトの名無しさん:2006/11/24(金) 16:42:52
C99のlong longは少なくとも64ビットなければならないようになっている。
732デフォルトの名無しさん:2006/11/24(金) 20:15:13
少なくともVC++6.0の時代から__int64は32bit環境でも普通に64bit整数として演算可能だった。
733デフォルトの名無しさん:2006/11/24(金) 21:15:05
IA32上で実行したけど、sizeof(long long)は8だったよ。
734デフォルトの名無しさん:2006/11/24(金) 22:14:11
typedef struct {
  int a;
  int b;
} INT_STRUCT;

というのと、

typedef struct _int_struct {
  int a;
  int b;
} INT_STRUCT;


の、どちらが良いのでしょうか。
後者を使うメリットはございますでしょうか。
735デフォルトの名無しさん:2006/11/24(金) 22:25:03
>>734
あえて
struct _int_struct hoge;
と宣言したい時に使え
736デフォルトの名無しさん:2006/11/24(金) 22:28:30
>>735
それ長くて美しくない、却下
737デフォルトの名無しさん:2006/11/24(金) 22:29:55
>>734
メリットはない、プログラミング言語Cによれば
古いバージョンの互換性を保つために残してあるが使うべきではないと書いてある。
738デフォルトの名無しさん:2006/11/24(金) 22:59:11
後者はコンストラクタとか使うためなんじゃないの?
739デフォルトの名無しさん:2006/11/24(金) 23:01:28
>>737 thx!そういうことですか、了解しました。
>>738 スレ違いだった、、、Cです。




でわでわ!
740デフォルトの名無しさん:2006/11/25(土) 00:54:46
>>725
最近boostと同じ名前をつけるようにしてる
741デフォルトの名無しさん:2006/11/25(土) 01:08:42
>>734

typedef struct _int_struct {
int a;
struct _int_struct *next;
} INT_STRUCT;
742デフォルトの名無しさん:2006/11/25(土) 01:15:13
C++ではこの場合typedefは必要ない!

struct INT_STRUCT {
int a;
struct INT_STRUCT* next;
};

で十分
743デフォルトの名無しさん:2006/11/25(土) 01:15:42
>>740-741
スレ違いに亀レスつけてんじゃねーよ。
あと、タグ名に奇怪な名前使うのは即刻やめていただきたい。
744デフォルトの名無しさん:2006/11/25(土) 01:16:11
>>742
C++ではnextの部分のstructも不要だっ!!!!
745デフォルトの名無しさん:2006/11/25(土) 02:03:16
>>744
そうだったのか、

でも自分は、PODな(あるいはそれに近い、メンバだけの)structには、
慣れで、そういう風に書くだろうけど。
746デフォルトの名無しさん:2006/11/25(土) 02:17:02
美学にこだわるのは勝手だが、いらん情報は書かんのがC++流だと思うがね。
747デフォルトの名無しさん:2006/11/25(土) 02:26:49
>>742 >>744
で、C++では typedef, struct をつけるとエラーになるの?
748デフォルトの名無しさん:2006/11/25(土) 02:28:06
それくらい自分で試せ。
749デフォルトの名無しさん:2006/11/25(土) 02:49:44
>>748

注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答を
するように。
750デフォルトの名無しさん:2006/11/25(土) 02:51:20
Intel C++ 8.1 (VS .NET 2003) では いずれもノーエラーだった。
でも付けないほうがすっきりしてるね。今後 C++流に簡潔に書くことにするよ。
他の処理系ではどうなのかな?
751デフォルトの名無しさん:2006/11/25(土) 07:03:16
c++では不要。
つまり、必要な処理系があればそれはc++ではないということだ(ぉぃ
752デフォルトの名無しさん:2006/11/25(土) 10:05:08
>>751
必要かどうかを聞いているのではなく、つけても問題ないかということじゃない?
つけても問題ないがつける意味は無い。
753デフォルトの名無しさん:2006/11/25(土) 12:06:37
カスタムiostreamの実装って難易度どれくらいですか?
何もしないNULLstreamがほしいんですけど。。。
754デフォルトの名無しさん:2006/11/25(土) 12:11:36
なんかWin32のOutputDebugStringをiostream化したページが
どこかにあったからそれ参考にするとか

いくつかのメンバを実装するだけだから難しくないかと
755デフォルトの名無しさん:2006/11/25(土) 12:12:03
つ[/dev/null]
756753:2006/11/25(土) 13:12:33
レスありがとー。
なぜほしいかというと、クラスにiostreamのポインタを持たせて、コンソールにだしたりファイルにだしたりしたかったからです。


>>754
なるほど!できるかなー。
ちょっと探してみます。

>>755
いやー、ウインドウズなんですよ。提案は感謝。
757デフォルトの名無しさん:2006/11/25(土) 14:04:33
>>756
つ iostreamで使えるかしらんが、nullデバイスはあるぞ。
echo "hoge" > nul

('A`) さて、javaにもどるか
758デフォルトの名無しさん:2006/11/25(土) 14:08:32
759デフォルトの名無しさん:2006/11/25(土) 14:37:38
>>753
もし Boost を許容できるなら Boost.Iostreams を使って以下のようにできる

boost::iostreams::null_sink snk;
boost::iostreams::stream< null_sink > os( snk );
os << "hoge";
760デフォルトの名無しさん:2006/11/25(土) 14:59:55
>>756
Windowsなら>>757というわけでnulが/dev/nullに相当する。
761デフォルトの名無しさん:2006/11/25(土) 15:04:53
>>757
およ、そんなことできたんですね。何に使うんだろ??

>>758
よさげですね。ちょっと読んでみます。

>>759
Boostは見るたびにスゲーっておもうんですが、なんせ範囲がでかいもんだから、僕の許容量こえてるんですよね。TT
次期標準になってコンパイラについてくるようになったら覚えようと思ってます。
今回は見送りますが、提案には非常に感謝。
762デフォルトの名無しさん:2006/11/25(土) 15:15:43
>>760
用途が良くわからないけど便利なんですかね。
--

うんで、
>>758を流して読んでみたんですけど、streambufをがりがり書くかiostramに委譲すればできそうな感じですね。
ご協力感謝!
763デフォルトの名無しさん:2006/11/25(土) 16:15:02
>>762
コマンドラインレベルで作業しない人にはイメージが伝わりにくいけどこんなとき便利。

・余計な出力は見たくない
make > /dev/null

・空の入力を与えたい
awk 'BEGIN {print sqrt(2);}' /dev/null
764デフォルトの名無しさん:2006/11/25(土) 17:00:28
linuxrcなんかによく使うよね。
765デフォルトの名無しさん:2006/11/25(土) 17:17:33
struct : std::streambuf {} g_dummybuf;
std::ostream nullstream(&g_dummybuf);
俺、こんなんでやってた。もうどうでもいいね。じゃぁ
766デフォルトの名無しさん:2006/11/25(土) 18:13:45
Effectiveなんとかとか、Exceptionalなんとかとか、内容被ってそうなが本が
多すぎです。
取りあえず Exceptional C++ は読んだんだけど、次に読むとしたら
何がお薦め?
767デフォルトの名無しさん:2006/11/25(土) 18:18:14
>>766 >>3 の次ってことで >>4 がいいんじゃない?
768デフォルトの名無しさん:2006/11/25(土) 18:47:41
>>767
なるほど。 template 周りも一冊読んでおくべきかな。
あんまり深入りする気はないけど、最近の変態 C++er のコードを読める程度には
なりたいしなぁ。 C++ Templates 良さげだけど…分厚いな…。

落し穴に嵌まらないためのノウハウ的な方向は Exceptional C++ で
足りてるのかな。なんかあれ読んだら無性に不安になって…。
769デフォルトの名無しさん:2006/11/25(土) 23:33:54
>3 は全部読んだほうが良いと思う。
重複は気にしない。重要だから繰り返されているということですな。
770デフォルトの名無しさん:2006/11/25(土) 23:36:07
おっと、The C++ Programming LanguageとC++ Primerはどっちか読めばよさげ。
771デフォルトの名無しさん:2006/11/25(土) 23:53:11
変態 C++コードが飛び交う現場なんて本当にあるんだろうか
772デフォルトの名無しさん:2006/11/26(日) 01:01:23
Boostの開発現場

実際にどこか1ヶ所にみんなが集まっているわけではないだろうけどね。
773デフォルトの名無しさん:2006/11/26(日) 01:45:04
正直More〜は立ち読みで十分な悪寒
774デフォルトの名無しさん:2006/11/26(日) 01:57:24
ちょっと質問。

hoge(aaa, "aaa"); を、HOGE(aaa) か HOGE("aaa") みたいに、
aaa を1度しか書かなくていいようにマクロ化したいんだけど、無理かな?

文字列連結とか # 連結マクロとか考えたけど思いつかず・・・
775デフォルトの名無しさん:2006/11/26(日) 01:58:58
>>774
#define HOGE(expr) hoge(expr, #expr)

これじゃ駄目なのか?
C++ 関係ないな。
776デフォルトの名無しさん:2006/11/26(日) 02:00:28
#define HOGE(aaa) hoge(aaa, #aaa)
777デフォルトの名無しさん:2006/11/26(日) 02:01:27
#define HOGE(x) hoge(x, #x)

それはこれで済む話か?
778デフォルトの名無しさん:2006/11/26(日) 02:05:07
774 の人気に嫉妬
779774:2006/11/26(日) 02:09:45
a##b → ab のタイプの連結しか知らなかったです
ありがとうございました。

連結マクロでぐぐってもいいのが見つからなかったんですが、
これ何か名前ついていますか?
780デフォルトの名無しさん:2006/11/26(日) 02:21:31
>>779
# は連結じゃねーしマクロじゃない。文字列化演算子。
781デフォルトの名無しさん:2006/11/26(日) 02:25:06
みんなマクロが好きなんだね
そんなに好きならLispさんちの子になっていいんだよ
782デフォルトの名無しさん:2006/11/26(日) 02:29:18
>>774-781
この流れに和んだ
783774:2006/11/26(日) 02:37:43
>>780
ありがとうございます、文字列化演算子#、トークン連結演算子## が見つかりました。
デバッグなどで、列挙体を表示するのに使いたかったのです。


#define HOGE(word) E_##word

enum TYPE {
 HOGE(aaa),
 HOGE(bbb),
};

#undef HOGE

#define HOGE(word) #word

static char* COMMAND[] =
{
 HOGE(aaa),
 HOGE(bbb),
};

こんな感じにやっといて、
HOGE(aaa) HOGE(bbb) の部分だけ別ファイルにして #include で取り込めばいいかなーと。
そうすれば、COMMAND[E_aaa] で "aaa" が取り出せるって寸法です。

後はスクリプトなどで、コマンド ⇔ ID の変換とか。
784デフォルトの名無しさん:2006/11/26(日) 02:41:44
>>783
常套手段だ。

× static char* COMMAND[] =
○ static char const* cons COMMAND[] =
785デフォルトの名無しさん:2006/11/26(日) 02:42:31
○ static char const* const COMMAND[] =
786デフォルトの名無しさん:2006/11/26(日) 09:02:28
bootsの話はもう終わり?
787デフォルトの名無しさん:2006/11/26(日) 09:16:02
始まってすらいない。
788デフォルトの名無しさん:2006/11/26(日) 09:30:17
Effective C++
More Effective C++
Effective STL
は必ず読むべきです。読みやすいですし。

以上を読んで理解ししたら、
C++ Coding Standards
を手元に置いといて眺めてください。
余力があれば、
More Exceptional C++
Exceptional C++ Style
C++ Templates
この他は読む必要ない。

789デフォルトの名無しさん:2006/11/26(日) 10:26:19
原典スルーかよ?
790デフォルトの名無しさん:2006/11/26(日) 10:40:35
原典読みやすいよね。
791デフォルトの名無しさん:2006/11/26(日) 10:54:32
ハムラビ原点?
792788:2006/11/26(日) 11:39:34
>>789
あ、D&Eを入れ忘れた。
793デフォルトの名無しさん:2006/11/26(日) 17:27:19
More Effective C++の翻訳版って誤訳あるの?
できれば日本語のほうがいいのですが、どうでしょう
794デフォルトの名無しさん:2006/11/26(日) 20:01:44
誤訳というかわかりにくい
795デフォルトの名無しさん:2006/11/26(日) 22:22:43
最近C++を勉強を始めた者ですが、
クラスのインライン関数についての質問なんです。
関数を頻繁に使う場合はクラスの定義の中に書くって参考書には書いてたんですけど、
実際どれくらいの頻度ならインラインを使うべきなんでしょうか?

また、頻繁に使うけど中でのループする処理が多い場合はインラインを使わない方がいいんでしょうか?

初歩的質問だとは思いますが、よろしくお願いします。
796デフォルトの名無しさん:2006/11/26(日) 22:31:47
>795
今は「気にするな」ということらしい。
inline指定の有無にかかわらず、コンパイラは勝手にインラインにしたりしなかったりするんだって。
797デフォルトの名無しさん:2006/11/26(日) 22:32:55
>>795
クラス定義外に書いても inline とつけた定義をヘッダに置けば
インライン関数にできる。分けて書いたほうがクラス定義がすっきりする。

インラインにしたい場合はヘッダに実装を晒さないといけないんで、
実測に基づいて効果があると確認できたときだけにしておいたほうがいいと思う。
798デフォルトの名無しさん:2006/11/26(日) 22:38:09
予測に基づくチューニングは無意味だから、
気にしないことを勧める。

VC7以降は「リンク時コード生成」というのがあって、
パフォーマンス向上のためのインライン宣言が無駄になる。
gccにはまだないけど、まあそのうちはいるでしょ。

むしろ、見易さを優先したほうがいい。
たとえば、メンバ変数の単純なgetterをインラインで書いておくと、
.h/.cppを往復する回数が減る。
799デフォルトの名無しさん:2006/11/26(日) 23:05:46
なるほど。勝手に判断してくれるんですか。
ありがとうございました!
勉強になりました!!
800デフォルトの名無しさん:2006/11/26(日) 23:07:40
単純なアクセサを実装見なければ判らないように書くほうがどうかしているとは思うが。
801デフォルトの名無しさん:2006/11/26(日) 23:19:12
>>798
実装が単純な getter であっても、インターフェースと混ぜてしまうのには
抵抗があるな。その getter が単純な変数の読み取りであることをユーザーに
認識させてしまって良いのかどうかによって、答えは変わるだろう。
802デフォルトの名無しさん:2006/11/26(日) 23:21:26
どうせテンプレートを使ったときには丸見えにするしかないから俺はあまり深く考えていない。
803デフォルトの名無しさん:2006/11/27(月) 02:45:48
上に同じ。
804デフォルトの名無しさん:2006/11/27(月) 04:30:49
整数を文字列変換&結合についての質問です。
整数:a = 10; b = 20; を 文字列に変えて結合したいんですけど、
このときに、文字列はstring型で扱いたいんですが、どうしたらいいでしょうか?
char型は使いません。
805デフォルトの名無しさん:2006/11/27(月) 04:33:00
std::stringstream
806デフォルトの名無しさん:2006/11/27(月) 04:33:25
boost::lexical_cast
807デフォルトの名無しさん:2006/11/27(月) 04:33:25
>>804
toString してたせばいいんじゃないんだっけ?
808デフォルトの名無しさん:2006/11/27(月) 04:55:28
printfのようなものを望むならば、
boost::formatがまさにそれだが。
809デフォルトの名無しさん:2006/11/27(月) 05:05:02
>>805-808
ありがとうございます。
いくつもあるとは・・・ちょっと驚きですw
810デフォルトの名無しさん:2006/11/27(月) 05:25:01
toString()はC++じゃないぞww
811デフォルトの名無しさん:2006/11/27(月) 06:25:59
boostも標準C++じゃない。
stringstreamやsprintfは標準だけどな。
812デフォルトの名無しさん:2006/11/27(月) 06:33:15
正しいC++規格で書かれたものが標準ではないとはこれいかに?
813デフォルトの名無しさん:2006/11/27(月) 06:50:58
空気嫁
814デフォルトの名無しさん:2006/11/27(月) 06:57:50
>>812
俺様ライブラリに
toString()というのを正しいC++規格で書けば良い
というお話ですよね?
815デフォルトの名無しさん:2006/11/27(月) 08:47:13
そして彼は私にあのときは標準C++規格に採用されたライブラリではないと
いいたかったのだったといったのだったがそれがすでに手遅れだったので
だっふんだをしたかったのだったがそれも手遅れだったのだったのだっふんだ
と言ったのだった
816デフォルトの名無しさん:2006/11/27(月) 14:58:10
        ,.-─ ─-、─-、
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ウプレカス [ uBLAS ]
  ( 西暦一世紀前半 〜 没年不明 )
817デフォルトの名無しさん:2006/11/27(月) 18:10:07
質問いたします.
クリップボード内のデータの履歴を取り,再利用するものを想定しています.
テキストだけでなく,画像やリンクなどを含めたデータをクリップボードから取り出し,
保存するにはどのようにしたらよいでしょうか?
818デフォルトの名無しさん:2006/11/27(月) 18:17:46
>>817
OLE使え。IDataObjectを取り出してそれを保存するんだ。
Windowsのスクラップオブジェクトもたぶんそうしている。
スレ違いだから、詳しくはよそ行け。
819デフォルトの名無しさん:2006/11/27(月) 18:28:55
OLEってなんですか?
WindowsってX-Windowsのことですか?
820デフォルトの名無しさん:2006/11/27(月) 18:33:13
おいしいお菓子のことですよ。ひとつあげましょうか。
821デフォルトの名無しさん:2006/11/27(月) 18:38:38
次のC++規格はいつ決まるんですか?
822デフォルトの名無しさん:2006/11/27(月) 18:40:52
       _,,-'' ̄ ̄`-、
       /        \
      ,/           \
     /   ―  ―     ヽ
    lヽ  - 、 ! , _     |
    |r――-、_⊥ ,――'-、 |,-,
    |::::::::::::::::/ |ヽ:::::::::::::::|-|'イ!|
     ト、__,,/:  |: `、__,,/ ,|ソ/
     .|    、_ j| _,、     ,|-'
     |   /lll||||||||||l`、   ,|
     `i ,|||' ̄= ̄`|||、 / ト、
     「|ヽ|ll||||||||||||||||| /i |::::\
    /:::::\`!!||||||||||||!!'   |::::::::\
   /::::::::::::::`ー-、.._ i     |::::::::::::::\
  /:::::::::::::::::::::::::::::::::::`ー-、. |::::::::::

 ハンツキー・ロムッテロ[Handski Romtteroo]
      (1955〜 アメリカ)
823デフォルトの名無しさん:2006/11/27(月) 18:56:02
ようハンツ、おまえももう50代か。
824デフォルトの名無しさん:2006/11/27(月) 22:55:25
ものすごく単純な質問なんですが
doubleより大きな実数値を表せる形ってありますか?
825デフォルトの名無しさん:2006/11/27(月) 22:58:45
long double >= double > float

long double == double か long double > double かは環境依存
826デフォルトの名無しさん:2006/11/27(月) 23:06:18
絶対値が大きいって意味?
それとも有効桁数が多いって意味?
827824:2006/11/27(月) 23:22:22
返答ありがとうございます。
>>825
xp home,borland 5.5無料版です。この場合long double の方がよくなるんでしょうか?
>>826
有効桁数です。100行100列くらいの逆行列を陰解法によって解いてて
それで有効桁数がネックとなり、逆行列の精度がすこぶる悪いんです…
828デフォルトの名無しさん:2006/11/27(月) 23:28:28
>>827
100x100程度の逆行列求めるのにdoubleで足りなくなるのは演算の仕方が悪いだけ。
829デフォルトの名無しさん:2006/11/27(月) 23:30:43
>>827
ちゃんとピボット選択してるのか。
830デフォルトの名無しさん:2006/11/27(月) 23:42:17
>>828
すみません。初心者なもんで…本当にシンプルなプログラムで
何も工夫してないので計算の仕方は当然悪いっちゃ悪いですw
>>829
知りませんでした…ピボット??なんじゃそりゃ??ってことで今大至急ググった結果
http://www.isc.meiji.ac.jp/~re00108/ch6/index.html
なるホームページが出てきました。
これを読んでもう一度プログラムを書き直して見ます!
831デフォルトの名無しさん:2006/11/28(火) 01:02:36
なんでublasやLAPACK使わないの?
832デフォルトの名無しさん:2006/11/28(火) 01:03:43
勉強してるんだろ。
833デフォルトの名無しさん:2006/11/28(火) 01:26:58
ええことや!
834デフォルトの名無しさん:2006/11/28(火) 06:38:55
LAPACK の逆行列ルーチンって、
ついでに行列式を求めてくれないんだよな。
いまいち使えん。
835デフォルトの名無しさん:2006/11/29(水) 01:18:13
std::stream 系に、ビット列?をそのまま渡す方法はないでしょうか?
例えば int 型を渡すと、4バイトそのままの形で流し込むイメージです。
出力先はファイルだったりメモリだったり色々です。
836デフォルトの名無しさん:2006/11/29(水) 01:20:57
>>835
operator<<を自分で定義すればいいだろ。

但しoperator<<(std::ostream&, int)は既に定義されているので、
ラッパークラスを作る必要はあるだろうが。
837デフォルトの名無しさん:2006/11/29(水) 01:30:33
その通りなのですが、もし用意されているのなら、
用意されているものを使った方がいいと思ったのです。
うーん、諦めて作りますか・・・ありがとうございます。
838デフォルトの名無しさん:2006/11/29(水) 01:31:49
std::write()なんてのもあるけど、これは個別に呼び出さないと
いけないけどな。
839デフォルトの名無しさん:2006/11/29(水) 01:33:45
write(reinterpret_cast<char*>&i, sizeof(i));
840デフォルトの名無しさん:2006/11/29(水) 02:41:23
2つのクラス間でstd::map<string, A *>のようなmapコンテナを渡す時は

std::map<string, A *> &get(){}
void set(std::map<string, A *> &m){}

こんな受け渡しでOKなのでしょうか?何故かAのポインタだけ
あってAの中身がないのですが困った助けて
841デフォルトの名無しさん:2006/11/29(水) 03:16:18
>>840
boost::ptr_map使えよ
842デフォルトの名無しさん:2006/11/29(水) 03:17:22
この関数のループ内で宣言したhoge *hのスコープはループが終了するまで会ってるのでしょうか?
FuncA(){
  for(...){
hoge *h;
....
}


もし、このhogeをループが終わってからもポインタアドレスとその中身を保存したい場合は
オブジェクトをコピーしないとダメなのでしょうか?
843デフォルトの名無しさん:2006/11/29(水) 03:18:32
>>842
アドレスをコピーしても意味がない。それはローカル変数だから
スコープを抜けると同時に消滅する。

中身はコピーしてとっておける。
844デフォルトの名無しさん:2006/11/29(水) 03:33:16
>>842
C++始めたばかりで解らないのですが
JavaみたいにClose()みたいなAPを呼んでコピーすれば
いいのでしょうか?
よろしければ、上の問題でコピーをどのように行えばいいのか
議事コード的なものを示していただけないでしょうか?
845デフォルトの名無しさん:2006/11/29(水) 04:10:01
>>844
C++にはClone()なんて気の利いた関数は用意されていないから、
自分で代入演算子やコピーコンストラクタを定義しなければならない。

もしクラスhogeにポインタを含んでいないのなら、デフォルトの代入演算子
やらコピーコンストラクタで十分。

そしてFuncA()の戻り値をhogeにすればよい。
846デフォルトの名無しさん:2006/11/29(水) 04:24:22
>>840
気になったのでやってみた。特に問題はないようだが
struct A {
void print() const {
std::cout << "A" << std::endl;
}
A(int j = 0) : i(j) {}
private:
const int i;
};

class T1 {
std::map<std::string, A*> m1;
public:
std::map<std::string, A*>& get() { return m1; }
void set(std::map<std::string, A*>& m) { m1 = m; }
};

int main()
{
T1 x;
std::map<std::string, A*> m, m2;
m["abc"] = new A(1); m["def"] = new A(2);
x.set(m);
m2 = x.get();
m2["abc"]->print(); m2["def"]->print();
}
847デフォルトの名無しさん:2006/11/29(水) 04:26:56
訂正
void print() const {
std::cout << "A" << i << std::endl;
}
848デフォルトの名無しさん:2006/11/29(水) 09:05:03
>>842
ポインタは、

FuncA(){
hoge *h;
  for(...){
....
}


でいいけど、その指している先をどうすればいいかはそのプログラムだけでは分からない。
849デフォルトの名無しさん:2006/11/29(水) 10:41:16
>>846
大丈夫かどうかはnewしたAの寿命次第だな。
多分>>840は、コンテナをコピーした後Aがdeleteされたんだろ。
850デフォルトの名無しさん:2006/11/29(水) 10:56:43
Perl、Ruby等でCGIプログラミングしか経験がないんですが、C++を勉強したい場合、
どのような本がお薦めでしょうか?一応「独習C++」は注文しましたが…。
851デフォルトの名無しさん:2006/11/29(水) 10:58:34
852デフォルトの名無しさん:2006/11/29(水) 11:06:19
>>3-4の書籍は、「初心者向けじゃない」という評価が多かったのですが、
それでも>>3-4を読むべきですか?
853デフォルトの名無しさん:2006/11/29(水) 12:14:31
>>852
プログラミング言語C++第3版
854デフォルトの名無しさん:2006/11/29(水) 13:12:16
まずCをやりなよ。
855デフォルトの名無しさん:2006/11/29(水) 14:48:50
>>854
独習C++を読んで、それに気付きました。独習C++って、Cを理解していることを前提に書かれていますね…。
CをやらずにC++を勉強することが出来る…というか基本的な部分も記載されているC++の本ってないでしょうか…。

「C++ ⊃ C」らしいですから、Cを勉強するってことがそのままC++の基本を勉強するってことなんでしょうけど…。
856デフォルトの名無しさん:2006/11/29(水) 14:59:25
>>855
俺Cやらずに独習C++でC++から入ったよ。
難しい事なんて何も無い。
857デフォルトの名無しさん:2006/11/29(水) 15:07:35
「型」や基本的な構造も、PerlやRubyしか触ったこと無いので曖昧です。

int main()
{

}

の「int」が何を意味しているのかも分かりませんし、

void hogehoge()
{

}

の「void」の意味も曖昧です。hogehoge(void)とか。<iostream.h>の「.h」の意味も分かりませんし。
なのでやはりCの基本も記載している本が必要だと思います。
とりあえず独習Cも注文してみました。少し慣れてきたら、プログラミング言語Cとプログラミング言語C++も手元に置くことにします。

Cの基本からC++を学べる本がありましたらご教示ください…。
858デフォルトの名無しさん:2006/11/29(水) 15:08:07
>>855
他言語で何か作れるならプログラミングの素養だけはあるって事だ。
あとは言語の仕様書(っていうとC++の場合悲鳴が上がるかもしれんくらいでかいけど)と
首っ引きで習うより慣れろでやっちまうのも手だよ。(>>853の出した書籍がそう)
859デフォルトの名無しさん:2006/11/29(水) 15:09:24
Ruby知ってて型がわからんってのは無しにしようよ。
860デフォルトの名無しさん:2006/11/29(水) 15:14:37
>>858
分かりました。やってみます

>>859
「型」という概念が分からないのではなくて、intやdouble、char、longなど、
出てきたことのないものを完全には把握してないということです。
各型(クラス?)の、Rubyでいうところのクラスメソッドのようなものも知りませんし…。
861デフォルトの名無しさん:2006/11/29(水) 15:15:54
とりあえず、皆さん親切にお答えくださってありがとうございました。
しつこくレスして申し訳有りませんでした。

独習C/C++とプログラミング言語C/C++でやってみます。
862デフォルトの名無しさん:2006/11/29(水) 15:28:08
過去何度も言われてることだけど、プログラミング言語Cはいまや古文書の類で、
決して初心者向きの入門書とかではないぞ。
もっと噛み砕いた本はいくらでもあるし、その本読んでからC++へ行こうなんて
考えるくらいなら、はじめからストラップのハゲのC++第三版読んでも変わらない。
難易度的には大差ないし、内容としては包含されている。

独習〜は正直好みも分かれると思う。
入門書として悪い物ではないかもしれないが、読み終わってみて
自分の中に残っているものの少なさに愕然としたりもする。

アンチも多いが柴田〜の本を立ち読みしてみて、合いそうならそっちを選ぶのも有りかもしれん。
中の人がとんでもなくイタい人なんで、その辺を気にしだすとまったく読む気がなくなる本でもあるが、
入門書の類には素直な良著も多い。
863デフォルトの名無しさん:2006/11/29(水) 15:32:40
「作って分るCプログラミング」がいいよ
864デフォルトの名無しさん:2006/11/29(水) 15:43:48
>>861
参考までに、
http://72.14.235.104/search?q=cache:Wf0hnrvG1J4J:www.ascii.co.jp/bookmart/pdf/47561/475611895X.pdf+C%2B%2B%E3%81%AE%E5%89%8D%E3%81%ABC&hl=ja&gl=jp&ct=clnk&cd=3&lr=lang_ja&client=firefox
原典では直接C++の学習を始めることを進めている。
>C++の前に C を学習する必要があるかどうかについては、未だに議論が分かれるところ
>だが、私は C++に直接行くのがベストだと確信している。
>C++が直接サポートしている高水準のテクニッ
>クの一部を知ったあとなら、C が高水準機能を持たないために必要になってくる C の難し
>い部分も学習しやすくなるだろう。

あとは、こことか
http://www.asahi-net.or.jp/~yf8k-kbys/c0.html
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
入門はこのへんのページをさらっと回して、
>>2-3に入って、先人のソースを読み始めるのが上達の近道。

C++の前にCをやれと言う人の多くは
自分がCをもともと知っていたという主観が多分に入ってるからそんな気にすることもないと思う。
俺もCから入ったが、これからの人はむしろJavaを先にやってからC++に入ったほうが
パラダイム循環としてはわかりやすいと思うし。
C++から始めてなんら問題ないと思うよ。独習C++では読者の前提条件が違うってだけ。
865デフォルトの名無しさん:2006/11/29(水) 15:51:06
みんな親切だな
866デフォルトの名無しさん:2006/11/29(水) 15:52:40
>>856 亀レスだが
さすがにそれは無いと思う……
他の書籍ならともかく、独習C++は独習C読んでることを前提として書かれてる。
1章(C++の概要)から、いきなり
 オブジェクト指向とは
 CとC++の相違点(ヘッダとか名前空間とかコンソール入出力とか)
2章・3章で、すぐにクラスの説明


まあ Perl の文法知ってればあんまり問題ないだろうけど。
あとは型をちゃんと使い分けるくらい?
867デフォルトの名無しさん:2006/11/29(水) 15:53:57
java厨が書いたC++コードは最悪だった
必然的にメモリ周りがおかしい。穴あけ過ぎ
最近は初めての言語がjavaってのが増えてるんだろうなー
868デフォルトの名無しさん:2006/11/29(水) 15:55:59
>>866
そうでもないよ。
分からない事は断片的に現れるくらいだし、それが出てきたとしても
数分ネットで検索するか考えるかすれば簡単に読み進めれるよ。
まぁCやらずにって言っても、ネットのC言語の資料を嫌と言うほど読み漁ってたからね。
869デフォルトの名無しさん:2006/11/29(水) 16:04:48
>>864
最近読んだなんかの本に、
「Javaはハード側の問題を隠しすぎ。やるならより低級のCとかからやるべき」
って書いてあった。
それはつまり、>>867が指摘してることなのかな


いや俺もプログラム初級者だからあんまわかんないけど。
870デフォルトの名無しさん:2006/11/29(水) 16:12:21
>C++の前にCをやれと言う人の多くは
>自分がCをもともと知っていたという主観が多分に入ってるからそんな気にすることもないと思う。

これはテンプレに入れてもいいくらいだと思う。
C++がCの「反省を踏まえた上での」スーパーセットだということを皆忘れすぎ。

Javaについては、こちらも「C++における諸々の問題点についての反省を踏まえた上での」言語なので、
ある意味退化言語に戻ってくる点については重々把握してもらっておかないと

>メモリ周りがおかしい。穴あけ過ぎ

には確実に陥るだろうなー。


そういう人にはC++/CLIとかC#って選択肢もあるとは思うけど。
871デフォルトの名無しさん:2006/11/29(水) 16:39:46
まぁあれだ、
Cの学習を始める前にアセンブリ言語やれって言われてた時代と状況は変わらんってことな。
872デフォルトの名無しさん:2006/11/29(水) 17:20:46
ぶっちゃけC++の基礎を学ぶ段階なら、本なんざいらん。
VC2005 Expressとか落として、ぐぐりながら思考錯誤で十分。
3ヶ月もあれば基礎は理解出来るだろ。
873デフォルトの名無しさん:2006/11/29(水) 17:26:28
また極論だな。3ヶ月間もPCの前でうだうだしてられる学生やニートならそれでもいいだろうが。
どの世界でもそうだが、自分がやって来た方法をそのまま押し付けることが教えることだと勘違いしてる奴多いよな。
874デフォルトの名無しさん:2006/11/29(水) 17:59:43
>>872
ARMでも読めば一週間もかからずに学べるのに、なんで三ヶ月もそんなことしなきゃならんの?
875初心者:2006/11/29(水) 18:34:55
私は大体C++の教科書は3日で読み終わりました。
初心者にお勧めなのはVisualC++入門等でしょう。私レベルなら1日ほどで
読み終わりますが、不慣れなあなたたちでも1ヶ月もあれば読めると思います。
その後C++の最新のバージョンであるVisualC#入門等を読むことをおすすめします。
876デフォルトの名無しさん:2006/11/29(水) 18:42:29
C#はC++の最新ではない。別の言語だ。
877デフォルトの名無しさん:2006/11/29(水) 18:47:11
迷える子羊の方々
C#厨の言葉に惑わされてはいけません
彼らは破滅と絶望を分かち合うことを楽しんでいるのです
878デフォルトの名無しさん:2006/11/29(水) 19:00:54
C/C++なら入門サイトもたくさんあるし本を読むほどでもない
879デフォルトの名無しさん:2006/11/29(水) 19:37:20
「言語を何日でマスター出来た」なんて話で本当にマスター出来ていた試しがないんだが
880デフォルトの名無しさん:2006/11/29(水) 19:38:04
>>876
ほんとにわかっていらっしゃるでしょうか?C言語+アルファ=C++言語なようにC++言語+アルファがC#というのは
常識です。あえていえばC++にはStandaad Template LibraryというVisualBasicライクな開発補助ツールが
付属する程度でしょうか。また最近はC#の更に発展としてD言語というものも開発されており、
D++、D#と今後C++は発展していくことでしょう。

注:現在、私は公私ともに多忙を極め、スレを見ることが困難な状況です。
しかしその中でも何とか時間を作り、このスレに出向いて質問をしています。
そのような貴重な質問者に対し、1行レス、煽り、罵倒で返す愚か者がいるようですが
私のような質問者がいなければそもそもあなたたちの知識をひけらかす場が
存在しないことをよく認識し、身の程をわきまえるべきであります。
よって、私のような貴重な質問者に対し、見下した回答、儀礼を欠いた回答
(例:質問してくれてありがとうございました等のお礼がない、である調で答える、
様をつけない、w等の意味不明な言葉を発する)を禁止いたします。
ましてや自分の立場もわきまえず逆にお礼を強要したり、各人の目に触れやすくなるよう
多数のレスに同様の質問をしているのを「マルチポスト」呼ばわりするような輩は
当然加害対象として私のリストに載ることになります(賢い方は意味がおわかりでしょう)
この規則は2chの精神にものっとっており、強制的に施行されます。もし違反した場合には
2ch管理人への通報、加害届けの提出、プログラムのハッキング(私には
2ch専門のハッキング部隊と契約を結んでおり、銀行の口座のハッキングから
FBIのコンピュータのハッキングまでこなす例のあれと親密な関係です)等断固たる処置
を取らせていただきます。また、形式的にはちゃんとした回答であっても、知識不足のため
不正確な知識を回答することも禁止いたします。よく考え、よく調べ、正確な回答を
するように心がけましょう。なお、当方が質問に対し多少は役に立つと判断した場合は
それなりに評価するのでご安心下さい。なお、確認はこの啓蒙文を読んでいることを
前提としており、読んでいない、理解できない等のいいわけは一切通用しません。
また、有識ある諸君は今後自分の発言に対しこの啓蒙文をコピペすることが義務になります。
881デフォルトの名無しさん:2006/11/29(水) 19:43:21
スルー推奨
882デフォルトの名無しさん:2006/11/29(水) 20:00:31
>>879
そもそも何を持ってマスターしたと言っていいのか決めようが無い罠。
883デフォルトの名無しさん:2006/11/29(水) 20:07:57
>>882
きっと、本人が「俺様はもう完璧」と思った時点。
だからマスターしているというのは大抵あてにならない。
884デフォルトの名無しさん:2006/11/29(水) 20:12:27
>>883
そういうのって中二病の症状のひとつだろ。

身に覚えがあるから恥ずかしい。
885デフォルトの名無しさん:2006/11/29(水) 20:21:13
趣味でC++10年ほどやってて大抵の事は知ってるつもりだけど、マスターしてるとはとても言えない。
未だに初めて知る事が年に数回あるから困る。
886デフォルトの名無しさん:2006/11/29(水) 20:28:59
啓蒙だ義務だってのが今年の冬の中二病の特徴かね。
887デフォルトの名無しさん:2006/11/29(水) 20:32:22
>>885
それ才能無いよ。
死ねばいいのに。
888デフォルトの名無しさん:2006/11/29(水) 20:47:15
C++から初めてテンプレートの直前あたりでCやアセンブラに退化して
それが終わったらテンプレート行くのがいいんじゃね?

失敗しまくって無理やり覚えるならどんなルートでもいいんだろうけどな
889デフォルトの名無しさん:2006/11/29(水) 20:48:19
>>887
俺も才能ないにしても、仕事で10年ぐらい使ってても>>885でいってること分かるよ。
まあC++がどんどん変わってるってのもあるけどやっぱり奥の深い言語だ。
890デフォルトの名無しさん:2006/11/29(水) 20:54:36
ちゃんと仕様書読んでれば、度忘れすることはあっても「初めて知る」なんてことあり得ない。
仕様書読まないヒトなら、仕様の全貌が分からないのだから「大抵のことは知っている」なんて言えるわけがない。
よって>>885は嘘。
891デフォルトの名無しさん:2006/11/29(水) 20:58:35
それってどこまでをC++に含んでるかによるんじゃない?
C++の言語仕様だけならそりゃ数ヶ月触ってればほとんどわかるだろう。
だけどライブラリやらデザインパターンやらって使わなきゃ知らないままのものって
多いしね。ちょっとしたテクニックにしてもしかり。
892デフォルトの名無しさん:2006/11/29(水) 21:01:34
>>890
仕様書が分かればその言語を全て知ったことになるのかよw
激しく日曜大工プログラマだなw
893デフォルトの名無しさん:2006/11/29(水) 21:07:14
>>892
仕様書も読まないずに、単に経験が長いからってだけで
「大抵の事は知ってる」なんて言う奴がいるわけねーwってのが骨子だよ。
894デフォルトの名無しさん:2006/11/29(水) 21:08:26
>>891
それは同意だが、それって新知識が年に数回程度で済むかな。
895デフォルトの名無しさん:2006/11/29(水) 21:13:45
>>894
それなりに長いことやってたら実際に現場でばりばりコード書く時間は少なくなってくるからねぇ。
単に勉強不足になったともいうが。
896デフォルトの名無しさん:2006/11/29(水) 21:30:14
また仕様書か
897デフォルトの名無しさん:2006/11/29(水) 21:35:39
規格書
898デフォルトの名無しさん:2006/11/29(水) 22:15:24
>>890
templateをこんな風に使うとsingletonができるなんて驚き
899デフォルトの名無しさん:2006/11/29(水) 22:36:47
マスターする=コンパイラ書いた
900デフォルトの名無しさん:2006/11/29(水) 22:39:12
×コンパイラ書いた
○規格に完全に準拠したコンパイラ書いた
901デフォルトの名無しさん:2006/11/29(水) 22:41:42
>>899
惜しい
マスターする=禿げた
902デフォルトの名無しさん:2006/11/29(水) 22:42:41
>>898
templateをこんな風に使うとsingletonができるのは当然
903デフォルトの名無しさん:2006/11/29(水) 22:43:12
ゲーハー
904デフォルトの名無しさん:2006/11/29(水) 22:58:17
>>900
そのころにはC++1x位になっていると思う。
905デフォルトの名無しさん:2006/11/29(水) 23:04:55
寧ろ、 『C--』 を作成
906デフォルトの名無しさん:2006/11/29(水) 23:07:42
wchar_tの配列を初期化するときは
str = L"string";
とLをつければいいみたいですが,単なる文字のときはどうすればいいですか?
wchar_t a = 'a';
wchar_t a = L'a';
どっちもコンパイルは通るみたいですが・・・
907デフォルトの名無しさん:2006/11/29(水) 23:08:55
>>906
L'a'が正しいです。
'a'は暗黙の変換が働いているだけ。たぶん'あ'などはうまくいかないでしょう。
908デフォルトの名無しさん:2006/11/29(水) 23:15:01
規格に完全に準拠したコンパイラ書けても
規格書を完全に暗記してても
変態テンプレート書けるとは限らん罠
909デフォルトの名無しさん:2006/11/29(水) 23:19:25
自分のしたいことが大体コーディングできて、
人が書いたものが全て理解できれば(難読化されてるものを除く)
「マスターした」と言ってもいいような気がするが・・・
910デフォルトの名無しさん:2006/11/29(水) 23:20:49
>>909
もしそうなら,マスターなんて単語いらない
911デフォルトの名無しさん:2006/11/29(水) 23:23:35
“マスター”だと「熟練した」以外にも「支配する」とか
「飼い馴らす」とかいうニュアンスがあるからねぇw
912デフォルトの名無しさん:2006/11/29(水) 23:32:20
>>909
そっから先の「どれ程のものを書けるか」ってのは、
特定の言語をマスターするとかの話ではなくて
プログラミングの才能みたいなものだからなぁ・・・
913デフォルトの名無しさん:2006/11/29(水) 23:52:45
C++規格の標準化の最前線で名が知れればマスターじゃないか。
フォースとか使えるようになるぜきっと。
914デフォルトの名無しさん:2006/11/30(木) 00:04:29
そういやヨーダも毛がないよな
915デフォルトの名無しさん:2006/11/30(木) 00:25:47
マスター禿
916デフォルトの名無しさん:2006/11/30(木) 03:06:14
無能はこういう、プログラミングの外側の
俺様定義や言葉尻に関するディスカッションになると元気だよね。
敷居が低くて、各人のレベルが曖昧にしか見えてこないテーマには
すぐ飛びつくからわかりやすいw
917デフォルトの名無しさん:2006/11/30(木) 03:53:34
マスター アジアは何をマスターしたのだろうか
918デフォルトの名無しさん:2006/11/30(木) 04:00:51
そりゃ文脈から言ってアジアをマスターしたんだろう。
919デフォルトの名無しさん:2006/11/30(木) 04:34:48
マスターベーションマスター
920デフォルトの名無しさん:2006/11/30(木) 04:44:53
最近かそってたからちょうどいい
921デフォルトの名無しさん:2006/11/30(木) 04:45:58
自慰はmasturbationだぞ。
922デフォルトの名無しさん:2006/11/30(木) 06:38:10
確かにここはスレタイにあるとおりC++相談室だ。
C#厨は最初からお呼びでないことをうっかり忘れていた。
923デフォルトの名無しさん:2006/11/30(木) 06:53:44
>>922
うっかりじゃなくてしっかりだろ
924デフォルトの名無しさん:2006/11/30(木) 07:19:33
>>923
しっかりじゃなくてちゃっかりだろ
925デフォルトの名無しさん:2006/11/30(木) 08:32:57
語尾に -tion がついていると全部同じ言葉に聞こえる
ヲナニーのやり過ぎだ(;´Д`)ハァハァ
926デフォルトの名無しさん:2006/11/30(木) 08:50:18
ステーションハァハァ
927デフォルトの名無しさん:2006/11/30(木) 08:51:16
C++の規格書を完全に理解するなんて不可能。
今でもマイナー/字句修正提案が行われているくらいなのに。

http://www.open-std.org/jtc1/sc22/wg21/のpaper読んだことあるヤツなら
>>891なんてこと言えるわけがない。
928デフォルトの名無しさん:2006/11/30(木) 08:54:02
だから定義が曖昧な言葉に突っかかるなと
929デフォルトの名無しさん:2006/11/30(木) 09:12:44
「ほとんど」と「完全に」には10〜20%くらいの開きがあるからね。
930デフォルトの名無しさん:2006/11/30(木) 11:38:07
よくいるよな。こういう曖昧な言葉につっかかって「俺は偉いんだぞ」とでも
言いたそうなやつ。見てて痛い。
931デフォルトの名無しさん:2006/11/30(木) 12:12:33
>>927
「完全」の意味がよくわからないけど、
規格書を読んで理解してる人がいるからこそ、
修正の提案がなされたり議論されたりされてるんじゃない?
932デフォルトの名無しさん:2006/11/30(木) 12:29:32
>>931
じゃない。
933デフォルトの名無しさん:2006/11/30(木) 12:33:30
じゃあこの言い回し修正汁とか言いだす人は、
「読んでないけど捏造に決まってる!修正汁!謝罪と賠償を」とか
「読んでも全く意味がわからないけどこういう意味に決まってる!修正しろ!」とか
言ってるわけか。病んでるな。
934デフォルトの名無しさん:2006/11/30(木) 12:44:43
>>933
そっくりそのまま>>933にお返しする
特に「読んでも全く(ry」
935デフォルトの名無しさん:2006/11/30(木) 12:49:25
>881
私にはスルー力がありません><
936デフォルトの名無しさん:2006/11/30(木) 12:52:33
ていうかさ、正直規格なんてある程度分かってれば目的のものは作れればそれが一番だと思うよ。
全部理解しないと使えないってのはむしろ言語としての欠陥かと。
937デフォルトの名無しさん:2006/11/30(木) 12:58:18
>>936
はぁ?お前が不勉強なだけだろうが。規格ってのは最低限度の知識なんだよ。
趣味でHelloWarld(笑)やってるぐらいならいいが>>927も読んでないような奴は
プログラマと自称するべきじゃないな。
938デフォルトの名無しさん:2006/11/30(木) 13:01:52
規格書が手元にあれば全部覚えてる必要を感じない。
もちろん参照頻度は少しずつ減っていくけどね。

939デフォルトの名無しさん:2006/11/30(木) 13:02:54
イタイwww
940デフォルトの名無しさん:2006/11/30(木) 13:07:36
痛い馬鹿がいると聞いて来ました。

   +   +
     ∧_∧  +
    (0゚・∀・)   ワクワクテカテカ
+.   (0゚∪ ∪ +
    と__)__)
941デフォルトの名無しさん:2006/11/30(木) 13:13:52
無能はこういう、プログラミングの外側の
俺様定義や言葉尻に関するディスカッションになると元気だよね。
敷居が低くて、各人のレベルが曖昧にしか見えてこないテーマには
すぐ飛びつくからわかりやすいw
942デフォルトの名無しさん:2006/11/30(木) 13:18:01
と俄然ハッスルする>>941であった
943デフォルトの名無しさん:2006/11/30(木) 13:25:21
牛乳飲みながらちんすこう旨いぞ。
944デフォルトの名無しさん:2006/11/30(木) 13:27:56
>>941
燃料投入乙
945デフォルトの名無しさん:2006/11/30(木) 15:28:32
>>943
ちんこすうに見えた。
ここの人たちは変なことばっかり言うって先入観でもあるんかな。
ちんすこうはうまいね。
味の想像は付くけど今度牛乳と一緒に試してみる。
946デフォルトの名無しさん:2006/11/30(木) 15:37:12
ちんすこう美味いか?砂糖かけたカンパンにしか見えない。
947デフォルトの名無しさん:2006/11/30(木) 16:05:15
おいおい、それ言ったらサトウキビは砂糖水でふやけた竹だぞ
948デフォルトの名無しさん:2006/11/30(木) 16:32:52
だいたい砂糖なんて甘い粉みたいなもんじゃん
949デフォルトの名無しさん:2006/11/30(木) 17:15:22
さーたーあんだぎー
950デフォルトの名無しさん:2006/11/30(木) 19:16:19
ろくに勉強して無い大卒が
「プログラミングなんていくら上手くても無駄、言語ヲタ脂肪wwww」
とかやたら必死になって力説する理由が分かるスレですね
951デフォルトの名無しさん:2006/11/30(木) 19:18:23
>>950
プログラミングなんていくら上手くても無駄、言語ヲタ脂肪wwww
952デフォルトの名無しさん:2006/11/30(木) 19:55:27
なんで急に大卒?
953デフォルトの名無しさん:2006/11/30(木) 20:44:38
>>952
「大学で数学ちゃんと習ってデスマーチと縁の無い職場に行くのが勝ち組」
が根拠らしい。
954デフォルトの名無しさん:2006/11/30(木) 20:49:00
VC2005のiostreamってスレッドセーフなの?
955デフォルトの名無しさん:2006/11/30(木) 21:13:38
>>954
スレ違い。だけど誘導先が見当たらないんで答えてしまう。

昔はシングルスレッド用とマルチスレッド用とをオプションで選択できたけど、
今はマルチスレッド用しかなくなってる。いちおうマルチスレッドに対応したもの
ってことになってるから、ほぼ問題ないと思われる。
956デフォルトの名無しさん:2006/11/30(木) 21:20:12
なるほど。さんきゅー。
957デフォルトの名無しさん:2006/11/30(木) 21:40:30
結局プログラミングなんていくら上手くても無駄なんだよ。
言語オタクはマジキモいから早く死んでね。
でも家畜さんが居なくなると困るから、奴隷のように働くしか道が残ってないかわいそうな人は死なないでね。
958デフォルトの名無しさん:2006/11/30(木) 21:45:03
これはいいツンデレ
959デフォルトの名無しさん:2006/11/30(木) 21:58:51
プログラマってきもいんだよwwww社会の屑wwwww
BoostだのSTLだの偉そうにしゃべりやがってオタクがwwwww
まあたまにはよくこんなコードかけるなあって感心することもあるけどさ
正直難しいよね。
俺なんかHello Worldがせいっぱいでさ・・・
できたらiostreamの使い方を教えていただけませんでしょうか先輩方。
960デフォルトの名無しさん:2006/11/30(木) 22:02:16
だが断る
961デフォルトの名無しさん:2006/11/30(木) 22:59:03
iostreamっていっても漠然と言われても広いから困る。
962デフォルトの名無しさん:2006/11/30(木) 23:57:53
C言語の関数を呼び出したプログラムを
libにしたのですが、このlibを呼び出そうとすると
mallocが見つかりませんなど、Cの関数の呼び出し部分が
参照できないようです。
C++のプログラムの中にCの関数を呼び出す記述が含まれる場合に
このソースをlibにする場合には他に何をすればよいのでしょうか?
963デフォルトの名無しさん:2006/12/01(金) 00:01:37
>>962
extern "C" が抜けてるんじゃない?
コンパイラ付属の stdlib.h を使えば malloc() では問題ないはずなんだが。
964デフォルトの名無しさん:2006/12/01(金) 00:41:03
>>963
externCは

char *hoge = malloc()ってな感じで使ってる場所でexternすればいいの?

組み込み系でなんかライブラリ標準じゃないのがちらほら.....
965デフォルトの名無しさん:2006/12/01(金) 00:51:49
名前マングリングを発動させたくない関数にextern "C"を使う。
966デフォルトの名無しさん:2006/12/01(金) 01:11:05
前から思ってたんだが、マングリングって響きがいやらしい。
967デフォルトの名無しさん:2006/12/01(金) 01:16:37
マングリ返しングリラ
968デフォルトの名無しさん:2006/12/01(金) 01:18:17
>>966
そうなんだよね。知っている人同士の会話なら問題ないんだけど、
職場で使うと変に誤解されそうで口にできない。
まあ使う機会なんてほとんどないんだけど。
969デフォルトの名無しさん:2006/12/01(金) 01:26:04
>>964 宣言に付けるんだよ。
970デフォルトの名無しさん:2006/12/01(金) 01:41:07
返り値とかも、周りから聞いたら相当危ない
971デフォルトの名無しさん:2006/12/01(金) 01:44:01
>>970
たしかに、音だけ聞いたら分からんな。

あと、プロセスを殺すとか、死んでとか。
つい電車の中で同僚と話してしまったことがある。
972デフォルトの名無しさん:2006/12/01(金) 01:46:51
こうですか?
>>971「で、そしたら(プロセスを)殺して(kill関数)、返り値が無ければ(ゼロであれば)、成功だな」
973デフォルトの名無しさん:2006/12/01(金) 02:01:34
プロセス周りだと親とか子とかゾンビとか出てきて、とっても危険な雰囲気。
974デフォルトの名無しさん:2006/12/01(金) 02:31:59
iostreamはまた別のメンドクサさがあってなあ・・
975デフォルトの名無しさん:2006/12/01(金) 06:25:55
fstreamでファイル操作する時、ファイルサイズ取得する方法ってありますかね?
Cの標準関数の場合は、ファイルの終わりにSEEKして位置情報取得すればいいんですけど。
fstream::size()みたいなメソッドがあれば一番なんですけどねぇ…
976デフォルトの名無しさん:2006/12/01(金) 06:35:54
fstreamでもやっぱり
ファイルの終わりにseekして位置情報を取得する
977デフォルトの名無しさん:2006/12/01(金) 08:17:20
seekp, seekg
978デフォルトの名無しさん:2006/12/01(金) 08:21:06
>>976
でもなんでC/C++の場合ってことごとくそれ系の関数/メソッドが無いんでしょうか?
何か、予め実装しておくと不都合な事でもあるんでしょうかねぇ…
io.hには_filelength()ってのがありましたけど…
979デフォルトの名無しさん:2006/12/01(金) 08:32:20
標準C/C++では入出力に関して、だいぶ非力な環境も想定していたと思う。
バイナリファイルをバイト単位で管理しない(できない)環境とかね。
(バイナリファイルでは書き込んだ終わりに余計なヌル文字がついていることがあってもよいというような記載もCにはあったはず)

Boostには、boost::filesystem::file_sizeという正にファイルの大きさを返す関数がある。
980デフォルトの名無しさん:2006/12/01(金) 08:47:12
CP/Mあたりは、ファイルシステムがファイルのサイズを管理してなかった。
なんで、実際にファイルのケツまで読んでEOFを確認しないと正確なファイルサイズがわからなかった。
981デフォルトの名無しさん:2006/12/01(金) 08:50:00
C/C++においてはファイルは生(なま)物だからな。
入力中にサイズが変わるかもしれないし、そもそも動的な入力デバイスかも知れん。
982デフォルトの名無しさん:2006/12/01(金) 09:03:09
なるほど、色々考慮してるんだなぁ。
まぁBoostに関数があるんならいいや。
983デフォルトの名無しさん:2006/12/01(金) 10:15:30
>>980
管理してないのではなくて、
バイト単位ではなく、ブロック単位の管理だった。

Text fileはそれでは不便なので、最後にCtrl-Zを置くことでバイト単位管理。
これがstdioのtext modeとbinary modeの由来の一つ。
CP/M上のstdioは、text modeでCtrl-Zを見たらEOFを返す。
binary modeはそうではない。
WindowsもCP/M互換で出発したのでこのCtrl-Zの扱いを引き継いでます。

上のような関係でiostreamにもその名残りが。
984デフォルトの名無しさん:2006/12/01(金) 11:24:49
流れ変えて悪いけど、VC++6.0のSTLのソース、あれ凄いね…
よくわからんけど、なんであんなインデントめちゃくちゃなの?
嫌がらせ?気持ち悪すぎて吐き気して来たんだけど…
まったく読めない…
985デフォルトの名無しさん:2006/12/01(金) 11:28:39
書いてる人の環境とタブ幅が違うとか
元のソースからVC++6用に機械的にコンバートされたものとか
986デフォルトの名無しさん:2006/12/01(金) 11:55:11
>>985 よく見るとインデントというより書き方にクセがある感じだなぁ、まぁ慣れかな。一部抜粋するとこんな感じ(vector)
bool _Lt(const _Myt& _X) const
    {return (lexicographical_compare(begin(), end(),
      _X.begin(), _X.end())); }
  void swap(_Myt& _X)
    {if (allocator == _X.allocator)
      {std::swap(_First, _X._First);
      std::swap(_Last, _X._Last);
      std::swap(_End, _X._End); }
    else
      {_Myt _Ts = *this; *this = _X, _X = _Ts; }}
  friend void swap(_Myt& _X, _Myt& _Y)
    {_X.swap(_Y); }
protected:
  void _Destroy(iterator _F, iterator _L)
    {for (; _F != _L; ++_F)
      allocator.destroy(_F); }
  iterator _Ucopy(const_iterator _F, const_iterator _L,
    iterator _P)
    {for (; _F != _L; ++_P, ++_F)
      allocator.construct(_P, *_F);
    return (_P); }
  void _Ufill(iterator _F, size_type _N, const _Ty &_X)
    {for (; 0 < _N; --_N, ++_F)
      allocator.construct(_F, _X); }
  void _Xran() const
    {_THROW(out_of_range, "invalid vector<T> subscript"); }
  _A allocator;
  iterator _First, _Last, _End;
  };
987デフォルトの名無しさん:2006/12/01(金) 11:55:16
インデントつーか、閉じ括弧の位置がLISP的だった気がする。たしか。
988デフォルトの名無しさん:2006/12/01(金) 11:57:28
でもこの調子でずらずら詰めて記述されてるんで、最初は圧倒されるね…
989デフォルトの名無しさん:2006/12/01(金) 12:09:52
STLのヘッダーファイル見ると頭がおかしくなりそうになる
まあ他のDLLファイルもソースコードは似たような感じなんだろうけど
990デフォルトの名無しさん:2006/12/01(金) 12:21:14
VC++6だと、プラウガが書いたヤツなんじゃないの?
彼は雑誌に良くコードを出すし、STLのソース本も出しているから、
行数が少なくてすむスタイルを好むんだと思う。

コーディングスタイルのスレがあるから続きはそっちで。
991デフォルトの名無しさん:2006/12/01(金) 13:14:43
Copyright (c) 1995 by P.J. Plauger. ALL RIGHTS RESERVED.
になってたからそうみたい。
992デフォルトの名無しさん:2006/12/01(金) 13:27:02
次スレはまだですか?

↓よろしく
993デフォルトの名無しさん:2006/12/01(金) 13:37:03
( ^ω^)立てられなかったお
994デフォルトの名無しさん:2006/12/01(金) 13:47:53
俺も無理だった
995デフォルトの名無しさん:2006/12/01(金) 14:32:23
996デフォルトの名無しさん:2006/12/01(金) 14:38:46
生きるのに疲れた
997デフォルトの名無しさん:2006/12/01(金) 15:20:03
age
998デフォルトの名無しさん:2006/12/01(金) 15:21:30
あっ!
埋めよう
999デフォルトの名無しさん:2006/12/01(金) 15:22:07
999got
1000デフォルトの名無しさん:2006/12/01(金) 15:22:42
1000なら寝る。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。