C++相談室 part34
■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG勝手に後ろを切り捨てちゃまずいだろ。
char hairetu[256];
if(str.length() >= sizeof(hairetu)) throw std::range_error("長すぎ");
strcpy(hairetu, str.c_str());
0551マイク ◆yrBrqfF1Ew
NGNG0552デフォルトの名無しさん
NGNGgap::sweet texture;
という記述があるのですが、
これはどういう構文なのでしょうか?
初心者で申し訳ない。
0553デフォルトの名無しさん
NGNG名前空間(またはクラス型) gap のメンバである sweet 型の変数 texture の定義。
インクルードの次の行であることには意味が無い。
0554デフォルトの名無しさん
NGNG0555マイク ◆yrBrqfF1Ew
NGNGnamespace gap {
typedef void sweet();
}
//sourcefile
gap::sweet texture; //declare
//omit
gap::sweet texture //def
{
std::cerr<<"\0m0th3rfuck3r"<<std::flush;
std::teminate();
}
0556522
NGNG名前空間 gap のメンバである sweet 型の変数 texture を
グローバル変数に定義しているということで間違いないでしょうか?
0557マイク ◆yrBrqfF1Ew
NGNG0558デフォルトの名無しさん
NGNG0559522
NGNGnamespace gap{
void sweet::print()
}
としておいて、ソースの中で
gap::sweet texure
texture.print()
となっているのですが、これは
sweet型の変数textureがprint()という関数を
呼び出しているということであってますでしょうか?
0560デフォルトの名無しさん
NGNGいや、それだとコンパイル通らないはず。
ところで、そのプログラム全部ここで解説させるつもりなのか?
0561デフォルトの名無しさん
NGNGセミコロンくらい見逃してやれよ。
0563デフォルトの名無しさん
NGNGchar*に対するfillはmemsetで特殊化している実装が多いです
0565デフォルトの名無しさん
NGNG頭悪そうだと思っていたが、もういいかげん頭悪いんだとわかった。
もう触りません。スレ汚して悪かった。
0566デフォルトの名無しさん
NGNG名前おかしいよ藁
0567デフォルトの名無しさん
NGNG複雑になるにつれ、クラスに纏めたいと思い、C++に手をだしました。
ただ、CもC++もまだ初心者で、中々苦労しています。
特に困っているのが、何をクラスにして派生クラスは何になるのか、メンバは何を持たせるか
みたいな部分が中々把握できません。
基礎的な書き方のようなものは、本を買ってプログラム組んでみました。
こういったことに慣れるための良い練習法のようなものがあれば教えてください。
0569アイク ◆uCUYQ8/A2w
NGNG0570デフォルトの名無しさん
NGNGワラタ
0571デフォルトの名無しさん
NGNG包含関係に気を配るとよろしいかも。
あと、Effective C++あたりが定番かな。
0573デフォルトの名無しさん
NGNGアドバイスありがとうございます。
本も探してみます
0576マイク ◆yrBrqfF1Ew
NGNG0578デフォルトの名無しさん
NGNGどのようにすればいいんでしょうか・・・
void Hage::OutLog(const char* fmt, ...)
{
va_list argp;
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
fprintf(stdout, "\n");
}
0579デフォルトの名無しさん
NGNGstd::string sss;
sss = "abc<TAB>bbb";
※<TAB>は制御コードのTABだと思ってください。
で、このストリングを、
sss.find();で見つけたいのですが、どうすればできますか?
そもそも、find()で制御コードを検索することってできるのでyそうか?
0580デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG\
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG>※<TAB>は制御コードのTABだと思ってください。
嫌です。
0585デフォルトの名無しさん
NGNG典型的な宗教論争だね。2ch なら煽り入れて楽しむところだが。
058611063
NGNG>>580,>>585
そんなこと言ってないでお前らも参加しろよー
ほれ、よく言うじゃん、「踊る阿呆に、見る阿呆。同じ阿呆なら踊らにゃそんそん。」って。
0587デフォルトの名無しさん
NGNG触りたくないです
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNGVC6のときにお世話になりますた。
0591デフォルトの名無しさん
NGNGその「踊る阿呆に・・・」って阿呆なのが前提じゃないと意味無いと思う。
0592デフォルトの名無しさん
NGNGたぶん放置されるはず。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG「継承するとき、いちいち基底クラスのprivateな定義まで読みたくねーよ」
って事か。
俺もprivate virtual使いだけど、一理ないこともないかも。
0597デフォルトの名無しさん
NGNG見なくていい(普通の)privateとは分けて、しっかりコメントつけておかないと、
読み飛ばされる可能性が高いね。
ただ、C++使いとしては、アクセス指定とvirtual指定とが
まるで関係ないということは知っておいて欲しい。
public virtual を派生先で private にしてオーバーライドとか、
逆に private virtual を派生先で public にしてオーバーライドとか、
いくらでも有り得るし、相応の効果がある。
実際に役に立つかとか、良し悪しはまた別にして。
0598デフォルトの名無しさん
NGNGDoxygenのようなドキュメント生成ツールでは一般的にprivateなメンバは
ドキュメント化されない。
だからドキュメントを信じてコーディングすると予期せぬエラー
をうけることになるわけだ。だからprivate virtualはイクナイ。
でも、やる人の気持ちがわからないわけではない。
やるなら何らかの形で明示的に示してほしいなぁ。
0599デフォルトの名無しさん
NGNGそりゃDoxygenの問題だろ。提案すれば対応してもらえそう。
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNGから、aaaaとbbbbを切り取って、それぞれstringに格納したいのですが、
いい方法はないでしょうか?
0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNGすぺしゃるさんくす!!!
0604デフォルトの名無しさん
NGNGありゃ? いいたいことが伝わんなかった…。
Doxygenでもprivateなメンバをドキュメントに含めさせることは可能なはず。
言いたいことはそれが可能かどうかではなくて、すべきでない場面が多々あるってこと。
例えばなんらかのライブラリを作って、それ用のAPIドキュメントを作るときは
privateなメンバを含めないでしょ、多分。
だって、それを使用するユーザは内部でのみ使用されるprivateなメンバを
意識する必要は無いし、しちゃいけない。
ところが、そのライブラリの中にprivate virtualな関数があると、ユーザ
privateな関数まで見てコーディングしなくちゃいけなくなる。
問題ありだよね?
0605デフォルトの名無しさん
NGNGC++ではprivateでもvirtualであればユーザーに関係有るんだから、
ドキュメント作るなら含めないといけないだろ。
Doxygenがそれには対応してないだけ。
private virtualが否定される理由としては理不尽。
0606デフォルトの名無しさん
NGNGtemplate メソッドの場合は、規定クラスの公開メソッドのドキュメントに
「派生クラスでこれこれのメソッドをオーバーライドすること」と書くから、
大差ないと思うが。
なんにしても、どっちでも良いよ、そんなの。
0607デフォルトの名無しさん
NGNGそもそもprivate virtualの是非について話しているのに
>C++ではprivateでもvirtualであればユーザーに関係有るんだから、
という前提を持ち出すのも理不尽。
俺はprivateなのにユーザに関係することが問題だと思う。
多分、これはpublic, private等の捉え方の違いなのかな?
俺はクラスの使用者に対する可視性だと思っているから、privateなのに
使用者に見えることが気持ち悪い。
これを可視性ではなくてアクセス権として捉えるとprivate virtual肯定派
のいいたいことが理解出来る。
なんだかんだ言って
>>606
>なんにしても、どっちでも良いよ、そんなの。
に賛成。 消えます。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNGnothrow は最適化に使えるけど、他の例外指定って使う価値あるか?
未処理例外で死ぬか、terminate() で突然死するか程度の差しか無いような。
C++はデフォルトの例外指定が throw(...) なので
一箇所でも指定していない関数があると誓約が途切れてしまうし。
0610デフォルトの名無しさん
NGNGvoid hoge(){ throw; }
set_unexpected( hoge );
で
0611デフォルトの名無しさん
NGNGclass C
{
...
struct CImpl;
CImpl* pimpl_;
};
を
class C
{
...
struct CImpl* pimpl_;
};
と書く事って認められてるんですか?VC7.1じゃコンパイル通んないんですが…
0612611
NGNGstruct C::CImpl{ ... }
ってやるとです。。
0613デフォルトの名無しさん
NGNGCImplはどこで定義してんの?
0614デフォルトの名無しさん
NGNG;が抜けてるけど,それがCImpl(Cのインナークラス)の定義ってことなんでしょう.
gccだとこんな感じ.規格では???
class C {
struct CImpl; // (a)
CImpl* pimpl_; // (a)
struct CImpl* pimpl_; // (b)
};
struct C::CImpl {}; // (1)
struct CImpl {}; // (2)
(a)-(1) ○
(b)-(1) ×
(a)-(2) ○
(b)-(2) ○
0615デフォルトの名無しさん
NGNGExceptional C++ では通して
(b)-(1)
の形式で書かれてるのですが、規格ではどんなもんでしょう…
0616デフォルトの名無しさん
NGNGこれは宣言じゃないんだから、
b-1が不可能なのは当然でない?
0617デフォルトの名無しさん
NGNGその説明だと本来は(b)-(2)も通っちゃいけないってこと?
0618デフォルトの名無しさん
NGNGvirtualなデータメンバって何故できないのでしょうか?
あれば便利だとおもうのですが。
0619デフォルトの名無しさん
NGNGたとえばどんな感じに使いたい?
0620デフォルトの名無しさん
NGNGテンプレートクラスって知ってるよね?
0621デフォルトの名無しさん
NGNGいったいどういう挙動をするものなのか、まるで思いつかない。
protectedメンバ変数とか、参照を返すvirtual関数で満たされないものなのか?
0622デフォルトの名無しさん
NGNG(b)-(2)は(2)で宣言と定義を同時に行ってるんだから、問題ない。
0623デフォルトの名無しさん
NGNG参照を返す virtual メソッドで我慢しとき。
0625デフォルトの名無しさん
NGNG> Exceptional C++は誤植なのかもしれないですね.
例えば何ページ?
0626618
NGNG// あるライブラリで定義されてるクラス
class B {}
class B1 : public B {}
class B2 : public B {}
// 自分のクラス
class A
{
vritual B b:
void proc(){ b に対して色々な処理}
}
class A1 : public A { B1 b1;}
class A2 : public A { B2 b2;}
みたいな感じです。
>>623
>参照を返す virtual メソッドで我慢しとき。
この方法がよさげなので、ためして見ます。m(_ _)m
0627デフォルトの名無しさん
NGNGclass B { virtual void age() = 0; };
class B1 : public B { void age() { fusianasan(); } };
class B2 : public B { void age() { mokorimoko(); } };
class A
{
B* sage;
void proc() { sage->age(); }
};
class A1 : public A { A1() { sage = new B1; } };
class A2 : public A { A2() { sage = new B2; } };
0628618
NGNGあ〜あ〜ぁあ〜ぁあ〜ぁあぁ。正にその通りです。
最初からインスタンス作ろうしたからダメなんだ。orz
muchas gracias、merci beaucoup、danke schon、grazie mille、非常感謝
0629デフォルトの名無しさん
NGNG上が class C 内に struct CImpl を宣言している。
下がグローバル名前空間に struct CImpl を宣言している。
初めて class/struct XXXX の形で現れた名前の宣言されるスコープは、
それが他の宣言中に含まれるか、単体で文になっているかで変わるらしい。
詳しくは規格の 3.3.1 -5- 。
ちなみに friend 宣言のときはまた別のルールになる。
0630デフォルトの名無しさん
NGNGclass A
{
virtual B& sage() = 0;
void proc() { sage().age(); }
};
こっち(参照を返す virtual メソッド)のほうがいいと思う。
0632デフォルトの名無しさん
NGNGポインタを保持するサイズが節約できる。
(>>627の例ではvtableと相殺するが、たぶんAにはvirtualなデストラクタが必要だろう。)
所有権の混乱を避ける。
(>>627のコードでnewしたB1,B2をだれがdeleteするべきなのか不明。)
ポインタへの代入忘れを防げる。
0634デフォルトの名無しさん
NGNG本当にそれがネックになるケースは、プログラム効率で有名な話の8:2より
はるかに小さいんだから、あんま気にしてもしょーがないだろ
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG" - "のような、空白を含む文字列を正しく検索するにはどうしたらいいでしょうか?
string sss = "100-100";
sss.find(" - ");
で検索すると、検索できてしまうのです・・・ORX
0637デフォルトの名無しさん
NGNG見つからなかった時の戻り値が string::npos だってのは知ってる?
0638デフォルトの名無しさん
NGNG↑顔文字に見える
0639デフォルトの名無しさん
NGNG- STLPort4.6.2
0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNGはっとりくんの弟に似てんな。
0643デフォルトの名無しさん
NGNGもまえの友達の弟なんて知らん。
0644デフォルトの名無しさん
NGNG「検索できてしまう」って、 find() の戻り値はどうなってたの?
0645デフォルトの名無しさん
NGNGstd::string nlp( " -" );
std::search( sss.begin(), sss,end(), nlp.begin(), nlp.end() ) == sss.end();
これでは?
0646デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています