C++相談室 part6
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNGhttp://www.boost.org/
STLport
http://www.stlport.org/
過去ログ
Part1
http://piza.2ch.net/tech/kako/980/980175292.html
Part3
http://pc.2ch.net/test/read.cgi/tech/1003832761/
Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/
Part5
http://pc.2ch.net/test/read.cgi/tech/1014217496/
Windowsの話はこちらで
Win32API 質問箱 Build3
http://pc.2ch.net/test/read.cgi/tech/1017072275/
Windows Programing for C/C++(Not MFC)
http://pc.2ch.net/test/read.cgi/tech/1018239290/
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/isocpp/
0005デフォルトの名無しさん
NGNGff | }!、,、〃 / ″オツカレー!!
,リ/ .ノ*´jコ`)'〃
{{ { ′ v' 《
ヾ.\. \ヾ
_,,二、》 ; \. 三,_
(( ゙ー=、`″〃 \. \-‐' ,))
゙ー=″ ゙' 一'
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGLoki
http://www.moderncppdesign.com/
0008デフォルトの名無しさん
NGNGで、
--aが出来るけど、a--ってどうやるの?
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGサンキュ〜〜♪
0011デフォルトの名無しさん
NGNGなんかダサい
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGダサいから自然と使われなくなるという罠?
treeをbeginからendまでスキャンするのに後置インクリメントとかされてるのみると、
はじめっから未定義にしときゃぁいいのに、と思う。
これで「高速化のためtreeにしてみたけど余計遅くなった」とか言われたりして、、、
もうね、ア(以下略)
0016デフォルトの名無しさん
NGNGv(^・^)v
0017デフォルトの名無しさん
NGNGint otsukare--(int){}
0018デフォルトの名無しさん
NGNGいや、構文がダサいって事。
operator--(int)
intって何よってかんじで。
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGそれはわかるが、(int)ってやっぱりセンスのかけらも感じられん
0021デフォルトの名無しさん
NGNGなんかいい方法考え出してくれ
0022StroustrAp
NGNG同前置演算子と比べた場合に存在する0ではないパフォーマンスの劣化を表している。
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG引っ込んでていいよ。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG悪いのは
0027デフォルトの名無しさん
NGNG>>23 は 0 とか言ってるけど。そうだとしたら本当にダサいね。
0028ストラウ
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGスを取得する方法ないのでしょうか? CreateThread()にメンバ関数
食わせるクラス作ろうとしてハマッてます。おたすけ。
0031デフォルトの名無しさん
NGNGメンバ関数にはthisがあるから、CreateThread()には食わせられないでしょう。
(素直は方法では)
0032デフォルトの名無しさん
NGNGなるほどそうですね。
CreateThreadにthis渡してランチャ関数を1hopおくことにします。
どうもありがとうございました。
0033デフォルトの名無しさん
NGNGDWORD (WINAPI CMyClass::*p)() = ThreadFunc;
pFunc = *(LPTHREAD_START_ROUTINE*)&p;
ThreadFuncは引数無しのDWORD型のメンバ関数。
動作はまるきり保障できないが。
0034デフォルトの名無しさん
NGNG通常の関数は定義する時には f(int i) のように必ず仮引数を書かないとエラー
になるが、operator--(int)の場合、operator--(int i)のように書かなくても
エラーにならない。それだけでも良しとしてくれ。
0036デフォルトの名無しさん
NGNGThreadFuncは、非virtualかつ
WINAPIであれば、まぁ大丈夫、なのかな‥‥
0037デフォルトの名無しさん
NGNGいや、通常の関数でも仮引数を指定しなくてもエラーになりませんよ。
私は開発の途中で、インタフェースでは決まっているが、まだ実装では
使っていない仮引数は、
void foo( int /* x */ ) { }
のようにしていることがあります。
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
0039デフォルトの名無しさん
NGNG関数を/* 〜 */でコメントアウトするときにドツボにハマる罠
0040デフォルトの名無しさん
NGNGこうすりゃおけ
#endif
0041デフォルトの名無しさん
NGNG生きているのかで混乱する罠
0042デフォルトの名無しさん
NGNGCはコメントの階層化ができるようにならないんだろうか・・・
/-COMMENT_NAME1-
/-COMMENT_NAME2-
-COMMENT_NAME2-/
-COMMENT_NAME1-/
こんな風にできたらいいなぁ。
0043デフォルトの名無しさん
NGNG0045999
NGNGゲラ
0046デフォルトの名無しさん
NGNGちょっと試してみたい気になりました。
タイプライブラリの取り込み(でしたよね?)で
何を指定したらよいのでしょうか?
#今BCBが手元に無いので言葉が不正確かもしれません。。。
会社でしばらく眺めていたんですが、それらしき物が
見つけられなかったんですけど。
0047デフォルトの名無しさん
NGNG確か、Microsoft Internet Controls です。
0048デフォルトの名無しさん
NGNGこんなのハマるやつはどうかしてると思われ
いるとすれば>>39あたり・・・(w
00491000
NGNG0050デフォルトの名無しさん
NGNGthanks!!
っていうか、スマソ。
C++Builderのスレで聞いたつもりになっていた。
激しく、誤爆しちまったぞと。
0051デフォルトの名無しさん
NGNG複数行のコード全体を無効にするときは #if 0 にするなあ。ネストできるしね。
また、#if 0 ならそれは「無効化されたコードである」ということを表明していることにもなるし。
逆に
#if 0
コードではなくコメントをずらずら
#endif
なんての見るとげっそり。
(さらに#if 0 だとなぜ無効にしたのかが分かりにくいので、#if HOGEHOGE とでもして
上に // #define HOGEHOGE 1 // なんたらかんたら...
と無効にした理由、有効にもどせる判断条件などを書いたりしてるな)
0052デフォルトの名無しさん
NGNG昔のコードが無効になった状態で残ってるのは萎えるなあ。
リビジョン管理しろよーって感じで。
てゆーか、リビジョン管理してても残してあったり・・・
0053デフォルトの名無しさん
NGNGC==C++だぞわかってんのかゴルァ!
0054デフォルトの名無しさん
NGNG評価した後で違いに気付くっていうふかーい意味があるのさ(w
0055デフォルトの名無しさん
NGNGC++;
なんだろう。
0056デフォルトの名無しさん
NGNG迂闊に使うと効率が悪くなるっていうふかーい意味があるのさ(w
0057デフォルトの名無しさん
NGNGclass CA{,,,,,};
CA a,b;
a=b;//これを禁止するにはどうすれば?
0058デフォルトの名無しさん
NGNGそれ暗黙の型変換なの?
単なる代入に見えるが。
代入ならば代入演算子をprivateにでもoverrideすれば防げるっしょ。
あと宣言時の代入記述は代入演算子ではなくコピーコンストラクタなので
場合によってはそっちも…
つーか、Effective/More Effective/Exceptional C++嫁
0059デフォルトの名無しさん
NGNGCA::operator=() と コピーコンストラクタを private にする
0061デフォルトの名無しさん
NGNG上手いな……。
0062デフォルトの名無しさん
NGNGtemplate<class T>class ST{
friend class TST<T>;
public:
T t;
ST(T val=0):t(val){}
};
template<class T1,class T2=ST<T1> >class TST{
private: T2* pt;
public:TST(T1 val=0):pt(new T2(val)){}
~TST(){delete pt;}
TST operator=(const TST& rhs){return pt->t=rhs.pt->t;}
template<typename VAL>
TST<VAL>operator=(const TST<VAL>& rhs)const{return pt->t=rhs.pt->t;}
T1 Ref()const{return pt->t;}
};
/*****************************************/
void main(void)
{
const TST<int> a;
TST<double> b;
a=b;
cout<<a.Ref()<<endl;
}
とやるとfriendの型がずれてしまう。これを回避するfriendの書き方はないだろうか?
0063デフォルトの名無しさん
NGNGTST<int>::operator= から TST<double>::pt (private) へのアクセスが
できないってだけじゃないの?
0064デフォルトの名無しさん
NGNGサンクス♪
friend関係無かったよ。
でも、ポインタを公開したくないなぁ。どうしようかね。
Ref()を公開して、その中でポインタを使用するとかしかないのか。
0065デフォルトの名無しさん
NGNGプログラムではなく操作上の問題です
0066デフォルトの名無しさん
NGNGいいものみっけた
0067デフォルトの名無しさん
NGNGISOの最新pdfだと思う
0068デフォルトの名無しさん
NGNGCtl+Z
0069デフォルトの名無しさん
NGNGだったら operator+= の戻り値は const にしなきゃいけない?
0070953
NGNG「[C++ エラー] frmMain.cpp(51): E2015 '__stdcall GetDiskFreeSpaceEx(const char *,_ULARGE_INTEGER *,_ULARGE_INTEGER *,_ULARGE_INTEGER *)' と 'Sysutils::GetDiskFreeSpaceEx' の区別が曖昧」
といわれました、 このばあい、Sysutils::GetDiskFreeSpaceExを呼び出す方法はわかるのですが、
__stdcall GetDiskFreeSpaceEx(const char *,_ULARGE_INTEGER *,_ULARGE_INTEGER *,_ULARGE_INTEGER *)
を呼び出すにはどのようにすればよいのでしょうか?
よろしくお願いします。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Show disk capacity and freespace
bool result;
ULARGE_INTEGER freespaceforcaller;
ULARGE_INTEGER capacity;
ULARGE_INTEGER freespace;
result=GetDiskFreeSpaceEx("C:\\",(ULARGE_INTEGER)&freespaceforcaller,
(ULARGE_INTEGER)&capacity,
(ULARGE_INTEGER)&freespace);
}
0071デフォルトの名無しさん
NGNGかな?
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG現段階ではネームスペースについての話ってことで
0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNG手持ちのコードがコンパイルできなくなっている。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGどこかで書いたが、アドレスとってvoid**にキャストしてから戻せばいける。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGreinterpret_castでも使え。
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG一般的にはconstにはしていないようだね。
0082デフォルトの名無しさん
NGNG亀レスだが、C++はかつてCのプリプロセッサだったからだよ。
つまり、はじめはC++でもプリプロセッサのアウトプットはCってこった。
ん?こじつけだぞ。真に受けるなよ。
0083三瓶です
NGNGfor(int n=0;n<MAX;n++){n○=2;〜〜〜〜〜〜
ってありますが、○の部分の小さな×はキーボードのドコを打てばいいんですか?
0084デフォルトの名無しさん
NGNG"
↑これか?
0085デフォルトの名無しさん
NGNGお箸を持つ方が右で、お茶碗を持つ方が左です(右利きの場合)。お間違い無きよう。
んで、その * はアスタリスク(スターとも言う)で、テンキーにあるかと。
0086三瓶です
NGNG0087デフォルトの名無しさん
NGNG*だわそりゃ。
0088三瓶です
NGNG了解しました。有難うございます。 >>85
0089デフォルトの名無しさん
NGNGint main()
{
std::cout<<"Hello,world"<<std::endl;;
return 0;
}
ASCII C++第3版で上のような状態でmainには一切手を付けないで
strustrup
hello,world!
C++
のように出力せよ、とのお言葉(問題)があったのですがどうすればよいのですか?
引っ掛けなのでしょうか?
0090デフォルトの名無しさん
NGNG#include <iostream>を消して(略
0091デフォルトの名無しさん
NGNGmainの外にグローバルなクラス変数を置いて、
そのコンストラクタとデストラクタで cout に出力する
0092デフォルトの名無しさん
NGNGA() {
std::cout << "strodsjof" << std::endl;
}
~A() {
std::cout << "C++" << std::endl;
}
};
A a;
これだとVCで"C++"が出力されない。
んなアホな!
0093デフォルトの名無しさん
NGNGレスどうもです!
やっぱりコンストラクタとデストラクタでしたか〜
参考になりましたありがとう!
0094デフォルトの名無しさん
NGNG#include <iostream>
int main()
{
std::cout<<"strustrup\nHello,world\nC++"<<std::endl;
return 0;
}
#define main Main
int main()
{
std::cout<<"Hello,world"<<std::endl;;
return 0;
}
0095デフォルトの名無しさん
NGNGそのメンバ関数名&&機能一覧表とかはどこに載ってますぁ?
0096デフォルトの名無しさん
NGNGいいでしょう。かかってきなさい。
0097デフォルトの名無しさん
NGNG↑
96
0098デフォルトの名無しさん
NGNG{
private:
class BBB;
BBB b;
public:
class BBB{ };
};
これをコンパイルしようとすると、「bの定義がないYO」と言われます。
publicとprivateの位置関係を換えると通るのですが、
位置入れ替えなしでうまくできないのでしょうか?
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGclass AAA
{
private:
class BBB{ }
BBB b;
public:
};
0101デフォルトの名無しさん
NGNGまぁいいや寝よう。
010295
NGNG0103デフォルトの名無しさん
NGNG>理由
それ以外の方法で出来るのかなと
気になって眠れないので、、、
… ( ´Д`)ネムイ
0104デフォルトの名無しさん
NGNGできません。
010598
NGNGC++の仕様ってことですか。。。
ありがとう(・∀・)
0106勉強中なの
NGNG#include<stdio.h>
main()
{
float c;
c=100/7;
printf("%f",c);
return 0;
}
ってやると14ってでてくるんだけど、
なんで14.285...ってでてこないの?
100/7.0 とか 100.0/7 とかやるとちゃんとでてくるのに・・・
0107デフォルトの名無しさん
NGNGC言語では、整数型同士の除算では結果も整数型になると、
C言語の規格で決められている。
0108デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNGいや、>>108のようになっているから、
切り捨てられた後にfloatにキャストされるので、
14.0で正しいってこと。
0111デフォルトの名無しさん
NGNGやるなら c = (float)100 / 7; とすればいいだけの話。
もしくは、c = 100. / 7; のようにどちらかに小数点を付ける。
0112デフォルトの名無しさん
NGNGISOの企画書
Effective C++(日/英どっちでも)
More〜 (原書)
Exceptional C++ (原書)
Modern C++ Design (訳書)
こんだけそろえればとりあえずは大丈夫か?
0113デフォルトの名無しさん
NGNGEffectiveよりAcceleratedの方が良いとどっかにあった。
templateだったらmodernより「Generic Programming−STLによる汎用プログラミング」
の方が基礎的で良いのでは?
0114デフォルトの名無しさん
NGNGあくまでスタイルとか、落とし穴を回避するための参考書。
STLなんかのライブラリの使い方とかはどうでもいい
0115デフォルトの名無しさん
NGNGint main() {
std::stringstream s, ss;
ss.str("a");
s << ss.rdbuf();
}
これをコンパイルして実行すると止まらない(traceしてみるとSTL内部のどこかで
無限ループっぽい)んですけど、STLのバグか俺がアフォなのか教えて下さい。
g++, libstdc++ の 2.96 です。Kondara2.1です。
0116115
NGNGg++の3.xだと動きますね…
0117デフォルトの名無しさん
NGNGAcceleratedC++の二つめのサンプルコードで、
#include <iostream.h>と書いて(VC++)どつぼにはまった経験があるのは
おれだけか??
(低レベルなカキコすまん
0118教えて
NGNG0119デフォルトの名無しさん
NGNGOSも書けや。
0120デフォルトの名無しさん
NGNG0121親切な人
NGNGヤフーオークションで、凄い人気商品、発見!!!
「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0122デフォルトの名無しさん
NGNG「親切な人」↓
http://pc.2ch.net/test/read.cgi/tech/1018454705/121n
プログラム板内では、現在、このレス
の話題で、持ちきりです。
0123118
NGNGWinXPです
0124デフォルトの名無しさん
NGNGGetFileSizeとか
SetFilePointerExとか
0125118
NGNGありがとう
0126Rubyist
NGNG0127デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c19.html#12
0128113
NGNG親切に教えてやったのに、本の題名だけで判断するかね。
小人養い難しだな。
0129デフォルトの名無しさん
NGNG俺も持ってるよ「STLによる汎用プログラミング」。C++Builder6からSTLPort
になったので、SGIしか使えなかったバインダとかも全部使えてホクホク
してる。
0130デフォルトの名無しさん
NGNGたとえば、
void func() throw(int)
{
throw double();
}
なんて書いても、コンパイラはチェックしてくれないし。(実行時に
unexpected は発生するけど)
また、上の関数の例外指定を後で throw(int,double) に直したとしても、
func を呼び出している全クライアントを書き換えるのも大変。
みなさんは、どういう感じで使ってますか?
0131デフォルトの名無しさん
NGNG例外の種類と同じ数だけの例外クラスがあるJavaとかC#とか見てると、なんかもっとどうにかならないのかと思う。
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG詳細←→全体がネスト構造になっているのを
ちゃんと現せればべつにクラスでなくてもいいんだろうけどね。
せっかくクラスのis a 継承のしくみがあるんだし
ゴスリングもスト羅臼トラップも
新しい例外専用の構造を導入するのが面倒だったんだろ。
専用のエラーの構造とか用意してある言語とかあるのかな。
0134デフォルトの名無しさん
NGNG使ってません(きっぱり)。
だって標準関数にほとんど例外指定がないんだもの。
どっから何が飛んでくるかわからんです。
bad_alloc とか。bad_allocを例外指定してない関数で、ちゃんとbad_allocをcatchするようなコード書いてますか?やってられません。
0135デフォルトの名無しさん
NGNGってことで、僕も使ってません。
0136デフォルトの名無しさん
NGNGconstなくてもCでこまらんのと同じ。
0137デフォルトの名無しさん
NGNGそれに見合う意義があるかなぁ…
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG必要になるはず。
0140デフォルトの名無しさん
NGNGDOS窓のBASICでゲームは作ったことあるので、
だいたいのフローチャートというかアルゴリズムは理解しています。
CIN COUT IF くらいでの簡単なプログラムは組めます。
目標はVC++でウィンドウズ用アプリで
シューティングとかパズルゲームを作りたいのですが、
まずどこから手をつけたらいいのかわかりません。
VCの解説書とかサイトってのは基本手にまず、C++のソースを
理解しているものとして書いてありますよね。
まずはC++の黒画面で表計算くらいできるようになってからVCでしょうか。
なにか良いサイトはありますか?
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGtemplate<class T>void func(T t){cout<<t<<endl;}
typedef template<class T>void(AA::*FUNC)(T);
FUNC fff;
};
typedefのところがエラーになるんですが、templateをtypedefする方法
はないでしょうか。
0144デフォルトの名無しさん
NGNGよくいとがわからんが。
(↓だったら激しく勉強しる。)
template< typename T > struct AA{
void func(T t){cout<<t<<endl;}
typedef void(AA::*FUNC)(T);
FUNC fff;
};
・・・
AA<int> aa;
AA<int>::FUNC fp = aa.func;
0145デフォルトの名無しさん
NGNGtemplate<class T>void func(T t){cout<<t<<endl;}
typedef template<class T>void(AA::*FUNC)(T);
FUNC fff;
AA():fff(func){this->*fff();}
};
>>144いいえ、こうやりたいのです。
0146デフォルトの名無しさん
NGNG出来ない。当然だが、もうちこっと頭使え。
0147デフォルトの名無しさん
NGNG0148144
NGNGstruct AA{ //冗長に書くと
template<typename T1>void func(T1 t){cout<<t<<endl;}
template<typename T2>typedef void(AA::*FUNC)(T2);
FUNC fff;
template< , >AA() . . .
}
か
template< typename T1, typename T2 > struct AA{ . . .}
か
template< typename T > struct AA{ . . .}
かのどれかかだろ?
(多分最後のやつしか動かんと思うが)
0149デフォルトの名無しさん
NGNG出来ました。ありがとうございます。まさかそんなtypedefの書き方があったとは・・・。
修行し直してまいります。
0150デフォルトの名無しさん
NGNGもちろんかまわないけど、リークに気をつけてね。
0151デフォルトの名無しさん
NGNGソースとか資料とかありませんか?
0152デフォルトの名無しさん
NGNG簡単すぎて(以下略
0153151
NGNGいやー初心者でして
0154デフォルトの名無しさん
NGNG初心者向けの本なら、どれ買ってきても「ファイルの読み込み方」と
「ファイルの書き出し方」は書いてあると思うからそれ嫁。
単純に分割するだけならそれ以上の知識はとりあえず要らん。
01551日目
NGNGカンの悪いやつが泣き言いってるんだろーな。
0156デフォルトの名無しさん
NGNGってんだったら一生ついてきます>>155さん。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG闇雲に難しい、といってる人には少し疑問がある。
言語自体は分かりやすいし、オブジェクト指向に関しても、でかいプログラム
書いたことある人なら無意識のうちに以前からやっていたことのような気がし
ない?
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG確かに難しいし。
0162159
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNGブラックボックスで開発できないから勘弁だが、
COMは素性のいいものさえ使ってればいっさい問題なし。
0165デフォルトの名無しさん
NGNGめちゃくちゃな使われ方もされてるからだろうけど。
あんまり使われてない・アマチュアしか使ってないのはそんなに叩かれない。
なぜなら一部のマニアがオナーニしてるだけだから。
0166デフォルトの名無しさん
NGNG0167C++初心者
NGNGclass B : public List { ... };
ってかんじでリストクラスを作って, リストを継承させて繋がるようにした
クラス B を作ってみたのですがクラスにリストが 2 個必要になったので
class B : public List1, public List2 { } ;
としてリストをつけようとすると 曖昧 だとエラーがでました。
やっぱりこんな実装は間違っているのでしょうか。
0168デフォルトの名無しさん
NGNG継承すると、クラスメンバは1つしか持てないので包含を使うとよい。
class List { friend class B; public: List *next; };
class B { List list1; List list2; ... };
ってな感じで。
0169デフォルトの名無しさん
NGNGというより、C++ならそもそもlistを自作する必要はない。
STLにあるので、それを利用しませう。
0170デフォルトの名無しさん
NGNGいや・・・・つーか学習用だろ。C++の入門書には必ずと言っていいほど
この手のクラス定義が出てくるからなあ。。。
0171167
NGNGありがとうございます。勉強になりました。
クラス設計もできないど素人なのでSTLはまだ何が何だかわからなくて…。
いつか皆さんのようなC++のエキスパートになりたいです…。
class B の中で Listクラスを包含すると list1.next が指すオブジェクトが
Listクラスってわかるんですが, class B かどうかまでは不明になりますよね。
class List に抽象ポインタを追加してダウンキャストしてみないと分からない
とか…。うーん…C++って難しいですね…。
class List { public: List *next; void *object; };
class B { public: List list1; List list2; };
B b; B * pb = dynamic_cast<B *>(b.list1.next->object); う…
0172デフォルトの名無しさん
NGNGそんなJavaっぽいリストにしなくて済むようにC++にはSTL…というか
テンプレートがあるので、やっぱり一刻も早く STL を学ぶべきかと思われ。
0173デフォルトの名無しさん
NGNG包含は継承とちゃうから、dynamic_castは失敗するよ。
そうじゃなくて、
class List {
friend class B;
List *next;
void *object;
List() : next(0), object(0) {}
};
class B {
List list1, list2;
public:
B() : list1(), list2() {}
List* Head();
List* Tail();
bool isEmpty();
void Insert(List*);
void Delete(List*);
};
って感じで、あくまでもインターフェイスをBに持たせて、内部は隠蔽してしまう
のがいいと思う。STLも大事だけど、クラスの勉強もしてね。
0174デフォルトの名無しさん
NGNGListクラスの中の List *next が未知のクラスT型だと解決しそうだな。
うーん…C++って便利ですね…。
0175デフォルトの名無しさん
NGNGabc[][][4]
最後が4というのは決まってるのですが、
その前の2つが決まってない時ってどうやるんですか。
アホな質問ですいません
0176デフォルトの名無しさん
NGNG超FAQだから調べりゃわかると思うけど、
int ***abc;
とかやって、1次元ずつnewしてください。
0177デフォルトの名無しさん
NGNGあっそ
0178デフォルトの名無しさん
NGNGもしくは、全体分を1次元配列とみなして一気に new して、自分で添え字
計算してアクセスする。間接参照がない分こちらの方が (マシンによっては
だけど) 速いかも。
0179デフォルトの名無しさん
NGNG本当に早くなるのか?
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNG一括で確保できる分、全体的な処理速度は上がるかも
配列の三次元要素とか二次元要素が
OSのページングの単位内で収まるような場合は
小分けして確保した方がよい結果がでるかも。
クラス二つ用意してどっちが速いか実データで検証してみりゃ
いいのでは?
0183178
NGNGごめん遅いわ。とりあえず簡単化のために二次元でやってみたよ。
1000 × 1000 の配列を取って、a[i][j] = 0; を 1000 回やってみた。
>>176 版 28.922sec, >>178 版 30.344sec
だった。要は、メモリアクセス対乗算命令ってことだけど、乗算の方が
ちょっと遅いみたい。
ちなみに、アクセスしているところのコードはこんな感じ
(a[ecx][edx] = 0; のコード)...
>>176 版 (う〜〜〜ん、素直だ...)
mov eax, DWORD PTR _a1
mov ecx, DWORD PTR [eax+ecx*4]
mov DWORD PTR [ecx+edx*4], 0
>>178 版
mov eax, DWORD PTR _nCols
imul eax, ecx
mov ecx, DWORD PTR _a2
add eax, edx
mov DWORD PTR [ecx+eax*4], 0
>>180
> FORTRANじゃないんだから。
なんのこっちゃ ?
0184178
NGNG[ソース]
#include <stdio.h>
#include <conio.h>
#include <windows.h>
static int nRows;
static int nCols;
static const Loops = 1000;
static int **a1;
static int *a2;
static void _fastcall Func1(int Row, int Col)
{
a1[Row][Col] = 0;
}
static void _fastcall Func2(int Row, int Col)
{
a2[nCols * Row + Col] = 0;
}
0185178
NGNGint main(int argc, char* argv[])
{
nRows = 1000;
nCols = 1000;
a1 = (int **)malloc(nRows * sizeof(int *));
for(int i = 0; i < nRows; i++){
a1[i] = (int *)malloc(nCols * sizeof(int));
}
a2 = (int *)malloc(nRows * nCols * sizeof(int *));
DWORD Start = GetTickCount();
for(int Loop = 0; Loop < Loops; Loop++){
for(int Row = 0; Row < nRows; Row++){
for(int Col = 0; Col < nCols; Col++){
Func1(Row, Col);
}
}
}
printf("%d", GetTickCount() - Start);
Start = GetTickCount();
for(Loop = 0; Loop < Loops; Loop++){
for(int Row = 0; Row < nRows; Row++){
for(int Col = 0; Col < nCols; Col++){
Func2(Row, Col);
}
}
}
printf(", %d\n", GetTickCount() - Start);
for(i = 0; i < nRows; i++){
free(a1[i]);
}
free(a2);
getch();
return 0;
}
/* ちなみに、配列にアクセスしているところを関数にしているのは、
直接書くと最適化されるため。*/
[実行環境]
Mother Board: Acer M19A (440BX)
Processor: Pentium-II 400MHz × 2
Memory: 256MB × 2, PC100 SD-RAM
Operating System: Windows2000 SP2
Development System: VC++ 6.0
Compile Options:
/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"
/D "_MBCS" /FAs /Fa"Release/" /Fp"Release/test.pch" /YX
/Fo"Release/" /Fd"Release/"
0186デフォルトの名無しさん
NGNG無理に調べなくてもいいけどさ。
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGpublic:char* pdata;~Str(){delete[] pdata;cout<<"end"<<endl;}
Str(char* pval){
pdata=new char[strlen(pval)];
strcpy(pdata,pval);
}
};
というクラスを作ったんですが、
Str str="ABCDF";
とやると、strcpyの部分でこけるんです。何故なんでしょうか??
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGstrlen(pval)+1。
0191デフォルトの名無しさん
NGNGstrlen(pval)+1
だろ。
0192デフォルトの名無しさん
NGNG車輪の再発明、もう見てらんない。
0193デフォルトの名無しさん
NGNGありがとうございます♪そうです、'\0'の分の領域確保を忘れて
おりました。ああ、漏れもまだまだ厨房・・・。
0194デフォルトの名無しさん
NGNGその場合は、>>178 版の方が速い。(nCols = 1024 で測定。) でも、
僅差 (1% 程度) だったよ。(ちなみに、nCols が定数で 1000 の場合だ
と、逆に >>176 版の方がわずかに速い。)
> 無理に調べなくてもいいけどさ。
初めそれでやってて、「やっぱ、俺って正しいわ。」と鼻高モードだった
んよ。で、よく考えてみたら...。俺ってバカじゃん、ショボーンてわけ。
0195デフォルトの名無しさん
NGNGまあ、そう言うな。クラスの勉強には、いい題材だよ。>>188 が必要に
駆られてやってるなら、別の勉強が必要だけどな。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG0198かなりのスレ違いだが
NGNG難易度順に並べるとしたらどうよ。
0199デフォルトの名無しさん
NGNGss << std::fixed << std::setw(2) << 1.0f;
std::string(ss.str());
こんなん?
0200デフォルトの名無しさん
NGNG普通はstringstreamから変換じゃないか?
0201デフォルトの名無しさん
NGNGstd::vector<char>とかにs(n)printfで書き込んじゃう方が多いね。
operator <<定義したオブジェクトにしかつか遠視。
0202デフォルトの名無しさん
NGNG遅いのは確かだか...
不便なのは慣れていないから(気持ちは分かるがsprintfだって結構不便)だし、
operator<<を定義しているものならなんでも使えるのはメリットだと思う。
(sprintfは組込型にしか使えない。)
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGs.sprintf("%dゲットズザー!",1000);
みたいに。
0205デフォルトの名無しさん
NGNG正直、俺もそれ楽で良いと思う・・・。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGclass Factorial {
public:
enum { value = N * Factorial<N-1>::value };
};
コレなんですか?何をしているかすら分からない・・・・・・・・・
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGtemplateと書いてあるけど、intの特定バージョン。
また、クラスFactorialは実体化時に展開される。inlineだと展開されないから
templateを使ったのでしょう。
0210デフォルトの名無しさん
NGNGそうですね。コンパイル時にエラーが出るでしょう。
0211デフォルトの名無しさん
NGNGenumは何か意味あるの?
0212デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNG実際のコードで教えて
0216デフォルトの名無しさん
NGNGstring用にoperator+でも定義したら?
0217デフォルトの名無しさん
NGNGstd::string ssprintf( const char *, ... );
くらいは簡単につくれるはず。
0218デフォルトの名無しさん
NGNGnewで複数(配列)確保することってできますか?
↓こんな感じ
class ctest{
public:
ctest(int a)
~ctest()
};
void main()
{
ctest *ct;
ct = new ctest(0)[32]:// これだとエラー
//delete ct;
}
とりあえず、現在
ctest *ct[32];
for(i=0;i<32;i++)ct = new ctest(0);
のように、ポインタを複数宣言して、ループで一個ずつnewやってます。
0219デフォルトの名無しさん
NGNGそれは勉強する時には関係ないだろ
0220デフォルトの名無しさん
NGNGできません。
もしできるとしたら、次のように書きたい所。
ct = new ctest[32](0);
これで出てくるコンパイルエラーを見れば意味がわかりますよ。
0221デフォルトの名無しさん
NGNG配置構文newを覚えなさい。
0222デフォルトの名無しさん
NGNGctest *ct;
ct = new ctest[32];
for (size_t i = 0; i < 32; ++i)
new (ctest[i]) ctest(0);
解放
for (size_t i = 0; i < 32; ++i)
delete (&ctest[i])->~ctest();
かもしくは
for (size_t i = 0; i < 32; ++i)
std::destroy(&ctest[i]);
引数が一個だったらstd;;vectorを覚えた方が早い。
0223デフォルトの名無しさん
NGNGfor (size_t i = 0; i < 32; ++i)
new (&ct[i]) ctest(0);
for (size_t i = 0; i < 32; ++i)
delete (&ct[i])->~ctest();
delete[] ct;
の間違いだった。写し
0224デフォルトの名無しさん
NGNG配置 new で何かできる?
0225デフォルトの名無しさん
NGNGこの場合は特に配置newのアドバンテージはないですね。
ただ使用法のサンプルとしては面白い。
0226デフォルトの名無しさん
NGNGdelete [] ct;
はやっちゃいけない予感。
識者よ、我らに正解を与えたまえちくしょう。
どっちにしろ、引数が一個なら配置構文のnewを使う意味はないね。
0227デフォルトの名無しさん
NGNGプログラミングはじめたばかりなのですが、
C++を使ってとりあずDOS窓で動く簡単なインベーダーゲーム
みたいなのをやってみようと思うのですが、
これベーシックでやったことあるのでノウハウはわかっています。
ただ、CとC++の区別がいまいちつきません。プログラマーサイトみると
たとえば表示命令でplintf<<"とcout<<"がありますよね。
とりあえず最初に<stdio.h>と宣言したならば前者で、
<iostream.h>と宣言したならば後者ということで
よろしいのでしょうか?そのような解説をしてあるページとかってありますか?
0228デフォルトの名無しさん
NGNGstdio.hとiostream.hで共通?
0229デフォルトの名無しさん
NGNGoperator newが確実に sizeof(class) を確保するとは限らない
(管理領域を余分にメモリ確保する可能性もある)から、
>>223の書き方は間違いじゃないか?
0230デフォルトの名無しさん
NGNG>ただ、CとC++の区別がいまいちつきません。プログラマーサイトみると
初心者のうちは、むやみにそういうサイトを参照するな。
9割はヘボだから。
世間で評価の高い本でも買ってよめ。
とりあえず<iostream.h>とか書いてあるサイトは無条件に捨て。
0231
NGNGVC++6.0
なんだけど別にC++じゃなくてCも使えるんだよねplintf
とそんでむしろcout(iostream.h)よりもplintf(stdio.h)を使ってる
人の方が多そうだけど。plintfの方がよく使うの?
0232デフォルトの名無しさん
NGNGplintfはリンカエラー出るっしょ。
0233
NGNGじゃあとにかcoutでいいってことね。
0235
NGNG0236デフォルトの名無しさん
NGNG<iostream.h>は古い書き方ってこと。
今は<iostream>。
最近書かれたドキュメントで<iostream.h>と書いてあったら
筆者が勉強不足。
0237
NGNG0238デフォルトの名無しさん
NGNGでもVC++だと-GXをつけないとえらいことになるね。
0239
NGNG0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGEUCの文字列をSJISに変換して出力する関数を書いてみたのですが、
うまく動きません。どこがおかしいのでしょうか?
void OutSJIS(string str)
{
for(unsigned int i=0; i<str.size(); i++)
{
unsigned char chr[2];
chr[0] = (unsigned char)str[i];
chr[1] = (unsigned char)str[i+1];
if(chr[0] < 0x80) continue;
if(i >= str.size()) break;
if( chr[0] & 0x01 )
{
chr[0] >>= 1;
if( chr[0] < 0x6F ) chr[0] += 0x31; else chr[0] += 0x71;
if( chr[1] > 0xDF ) chr[1] -= 0x60; else chr[1] -= 0x61;
}
else
{
chr[0] >>= 1;
if( chr[0] < 0x6F ) chr[0] += 0x30; else chr[0] += 0x70;
chr[1] -= 0x02;
}
str[i] = (char)chr[0];
str[i+1] = (char)chr[1];
}
cout << str << endl;
}
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG半角文字の場合continueしてしまい、表示されない。
0244241
NGNGありがとうございます。
str[i+1] = (char)chr[1]の次の行にi++を追加したら
とりあえず全角文字列の部分は表示できるようになりました。
>>243
確かに半角文字が表示されません。
今色々やってみているところです。
0245デフォルトの名無しさん
NGNGデストラクタのほうは、ループをダウンカウントにしないと
まずいっしょ。
…ていうか、よく見たら間違いだらけのような。
ctest* ct = operator new[](sizeof(ctest)*32);
for (int i=0;i<32;++i)
new (&ct[i]) ctest(0);
for (int i=31;i>=0;--i)
ct[i].~ctest();
operator delete[](ct);
More Effective C++の項目4を参考にした。これが正しいコードらしい。
ダウンカウントはともかくとして、>>223のコードって正しく動くの?
0246デフォルトの名無しさん
NGNGなりますか?それとも不定ですか?
0247デフォルトの名無しさん
NGNGstructの中にコンストラクタが宣言されてなければ、デフォルトコンストラクタが
呼ばれ、「ゼロ」で初期化される。
0248デフォルトの名無しさん
NGNGコンストラクタがあるメンバに対しては初期化されるが
コンストラクタの無い基本型は不定じゃない?
0249デフォルトの名無しさん
NGNGプログラミング言語C++第3版P172§6.2.8を嫁。
0250デフォルトの名無しさん
NGNG読んだけど、「組み込みデータ型に対してコンストラクタを明示的に使ったときの値は」
のことなら、この場合明示的ではないので該当しないと思うが。
0251デフォルトの名無しさん
NGNG実行してみれ。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int *p;
vector<int> *vp;
p = new int[10];
vp = new vector<int>(10);
for (int i = 0; i < 10; i++)
cout << p[i] << ' ';
cout << endl;
vector<int>::iterator pv = vp->begin();
for (; pv != vp->end(); pv++) cout << *pv << ' ';
cout << endl;
}
0252デフォルトの名無しさん
NGNG4.9.5 初期設定
中程の
「配列と構造体のメンバは、配列構造体が静的であるかどうかに関わらず、デフォルトで初期化される。」
と書かれているのは誤植で
http://www.longtail.co.jp/errata/
によると
pg.119 s/静的であるかどうかに関わらず、デフォルトで初期化される/静的であるかどうかによって、デフォルトで初期化されるかどうかが決まる/
と訂正されている。
0253デフォルトの名無しさん
NGNGその例は、STLが明示的なコンストラクタ呼び出しを行っているので
0初期化される例だね。
だけど、今回の>>246は単なるstructのnewの話なので、違う話だな・・・
0254253
NGNGあ、見当違いだった。
>>251
new(の過程で呼ばれるメモリ確保が) 0初期化する処理系だと
どっちも0になってしまうよね。
試しに手元のgcc 2.9.5 で struct を new してアセンブリ出力してみたが
メンバの初期化コードは生成されなかった。
0255デフォルトの名無しさん
NGNG見てみた。
俺の第3版は初判第1冊だ。
鬱だ・・・・・・・・・
0256名無しかも
NGNG0257デフォルトの名無しさん
NGNGC++の場合はなるべくdefineの代わりにconstやinlineを使うように。
ただ#ifdefなどのマクロ評価はC++でも多用される。
0258デフォルトの名無しさん
NGNG3.141592653589793と記述する代わりに、変数 pi にdefineを使って値を割り
当てることができ、3.14...という長い定数を使う代わりに pi を使うことが出来る。
さらに、円周率が変わった場合に、プログラムの変更が容易になるという利点がある。
0259256
NGNG02609999
NGNG-------風俗の総合商社・MTTどこでも-------
〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
0261デフォルトの名無しさん
NGNGあと、p293 「10.4.2 デフォルトコンストラクタ」も読むとよいかと。
つか、ここにも誤訳があるんだよなぁ… (ページの終わりのあたり)
0262デフォルトの名無しさん
NGNG「約3」なんかになっちまったおかげで、jokeがjokeで無くなってしまった...
0263デフォルトの名無しさん
NGNGclass local_c{
public:char* temp;local_c(size_t val):temp(new char[val+1]){}
~local_c(){delete[] temp;temp=NULL;cout<<"local_end"<<endl;}
};
local_c lo(size);
while(size--){
lo.temp[size]=pdata[size];
cout<<lo.temp[size]<<endl;
}
return lo.temp;
}
pdataは何処かで定義されている配列です。この関数を、
cout<<out(3)<<endl;
とすると、どうやらアドレスがchar*にキャストされて表示されている・・・みたいです。
returnの部分を何とか出ませんか?
0264デフォルトの名無しさん
NGNGそれはともかく、return された lo.tempの指すメモリは、returnされた時点で開放されてるので
coutに渡されたときにはすでに無効アドレスだべ。
0265デフォルトの名無しさん
NGNGサンクスです。何か根本から間違っていました。出直してきます。
0266デフォルトの名無しさん
NGNGいや、無効にならないように、関数内でnewして新規に確保しているわけだが、
デストラクタ~local_c()で既にdeleteされたポインタを返しているのが問題では
ないだろうか。
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGstd::string使っとけばいいんとちゃうん?
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG効率をあまり考えないなら(どうせ sprintf だし効率悪くても良いだろ)、
1. fprintf() で /dev/null に書き込んで文字列長さを取得
2. alloca() でスタック上に文字列を書き込むバッファ領域を確保
3. 2 で確保した領域に sprintf()
4. そのバッファから std::string() をコンストラクトして返す
とかで簡単に実装できる。
0271あう
NGNGusing namespace std;
int max(int temp,int a){ /* 最大値を求めるときに渡す関数 */
return temp<a;
}
int min(int temp,int a){ /* 最小値を求めるときに渡す関数 */
return temp>a;
}
/* 一般的にトップを求める関数 */
int gettop(int* a,int size,int (*p)(int,int)){
int temp, i;
temp = a[0];
for(i=1;i<size;i++){
if((*p)(temp,a[i])) temp = a[i]; /* 共通化した処理 */
}
return temp;
}
int main(){
int data[] = {36,47,19,11,18,25,20,57,39,67,28}; /* 対象データ */
int size = sizeof(data)/sizeof(int); /* 配列サイズを求める */
/* 実際に使ってみる */
cout << "最大値 : " << gettop(data,size,max) << endl;
cout << "最小値 : " << gettop(data,size,min) << endl;
return 0;
}
一番最初の最初のmax関数とmin関数ですが、temp>aとか条件を返して
ますよね?なのになんで返り値の型はなんでintなの?boolじゃないの?
不思議に思ってコンパイルしてみたらちゃん通りましたけど理由がわかりません
どなたか教えて下さいおねがいしまう。
0272デフォルトの名無しさん
NGNGif((*p)(temp,a[i])) temp = a[i]; /* 共通化した処理 */
で、真か偽かだけを見ているので、boolでもintでも通ります。
0273デフォルトの名無しさん
NGNGあるいは、関数テンプレートとか使わね?
0274あう
NGNGだったらやっぱりboolって書くべきじゃないですか?
0275あう
NGNG私が書いたわけじゃないので・・・
メルマガにのっていました。
0276デフォルトの名無しさん
NGNGこれって不正ですか?
#include <iostream>
using namespace std;
void foo(int i) throw (char*)
{
if (i == 0) throw "zero";
cout << "non-zero";
}
main()
{
try {
foo(0);
} catch (char* s) {
cout << "error : " << s <<endl;
}
return 0;
}
string& で受けても同じだそうです。
0277デフォルトの名無しさん
NGNG某処理系って何?
0278デフォルトの名無しさん
NGNGusing namespace std;
bool f1(void){
return true;
}
bool f2(void){
return false;
}
void get_f(bool (*p_func)(void)){
bool n=(*p_func)(void);
if(n)cout<<"nはtrue"<<endl;
else if(!n)cout<<"nはfalse"<<endl;
}
int main(void){
get_f(f1);
get_f(f2);
return 0;
}
関数ポインタを引数にとる関数つくりたいんだけどできません。
なぜ?
0279デフォルトの名無しさん
NGNG関数呼び出しに日下部はいらんよ
0280デフォルトの名無しさん
NGNGあ!そうでした。すいません。馬鹿だ・・・
ところで日下部ってどういう意味?
0281デフォルトの名無しさん
NGNGvoidが不要って事ね。
0284デフォルトの名無しさん
NGNGΛ Λ
(. .)
( )〜
みたいなのだろ
0285デフォルトの名無しさん
NGNGg++だとchar *を投げても受け取られませんね。
#include <iostream>
#include <cstdlib>
#include <exception>
using namespace std;
void my_terminate()
{
cout << "unexpected error occured!" << endl;
exit(1);
}
void foo(int i) throw (char *)
{
if (i == 0) throw "zero";
cout << "non-zero";
}
int main()
{
set_terminate(my_terminate);
try {
foo(0);
}
catch (char *s) {
cout << "error : " << s <<endl;
}
}
0286デフォルトの名無しさん
NGNGif (i == 0) throw "zero";
を
if (i == 0) throw static_cast<char *>("zero");
にしたらg++でも正しく動作しました。
どうやら throw "zero"; だけではchar *型の例外を投げたことには
ならないようです。やれやれ。
0287デフォルトの名無しさん
NGNG某処理系(w)では
11c12
< void foo(int i) throw (string&)
---
> void foo(int i) throw (char *)
13c14
< if (i == 0) throw string("zero");
---
> if (i == 0) throw "zero";
23c24
< catch (string& s) {
---
> catch (char *s) {
でもBus Errorを起こすみたいです。
0288287
NGNG0289デフォルトの名無しさん
NGNG>ならないようです。やれやれ。
const char* 投げてることになってるんじゃないかな?
0290デフォルトの名無しさん
NGNG産休。某処理系で試してみてくらしゃい。
#include <iostream>
#include <cstdlib>
#include <exception>
using namespace std;
void my_terminate()
{
cout << "unexpected error occured!" << endl;
exit(1);
}
void foo(int i) throw (const char *)
{
if (i == 0) throw "zero";
cout << "non-zero";
}
int main()
{
set_terminate(my_terminate);
try {
foo(0);
}
catch (const char *s) {
cout << "error : " << s <<endl;
}
}
0291241
NGNG再makeしたら動くようになりました。
これを使って、coutを継承してoperator<<をオーバーライドし、
int等の自動変換を継承しつつ、
char*やstringが渡された時に自動的に文字コードを変換するようなものを
作ることはできるのでしょうか?
0292デフォルトの名無しさん
NGNGただし、インスタンスであるcoutを継承する、ということはできません。
#defineなど邪法を用いれば、おそらくお望みの結果となるでしょう。
0293デフォルトの名無しさん
NGNGフィルタ的なストリームバッファを実装してみたら。
0294デフォルトの名無しさん
NGNG某処理系では何を投げても seg. fault か bus error になるようです。set_terminate効かず(泣
どうも原因は283のリンク先にあるとおりlibc_mallocでこけてるみたいです。
0295デフォルトの名無しさん
NGNGライブラリがバグってるんじゃ手の施しようがないね。
g++の修正差分って配布されてないの?
0296デフォルトの名無しさん
NGNGpublic:typedef void(CA::*FUNC)(void);
template<typename T>typedef void(CA::*Multi)(T);
FUNC fff[4];
A(){fff[0]=(Multi)foo;}←--------このMultiみたいに汎用のキャストって出来ます?
void func(){cout<<"func"<<endl;}勿論これはエラーなんですが・・・・・。
void foo(int a){cout<<a<<endl;}
};
0297デフォルトの名無しさん
NGNG何をしたいのかよくわからんが、
関数オブジェクトでも使っとけ。
0298デフォルトの名無しさん
NGNGtypedef void(*FUNC)(void);
void foo(int a){......}
void hoge(double a){........}
FUNC fff;
fff=foo;//エラー
これを、
fff=(Multi)foo;
fff=(Multi)hoge;
と書きたいんだ〜〜
0299デフォルトの名無しさん
NGNGfffを引数可変な仮装関数みたいな感じにしたいみたいだが、
ちっとはコンパイラ開発者の身にもなってみろよ。
そういうそういうことができたとして、
fff = (multi)foo; fff(3);
fff = (multi)hoge;fff(3);
を、どうコンパイルする、っていうんだ?
引数をpritnfスタイルにして共通化するとか、
VARIANTオブジェクトに共通化しる!
0300デフォルトの名無しさん
NGNGfffに代入した後はどうやって使う気だ?
もしかして引数の型で呼ぶ関数を変えたいとか?
0301298
NGNG全メンバ関数アドレスを単一の配列に格納して使用したかったんですが、
無理となると、さてどうしようか
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNGだからMultiにキャスト出来る方法ないかな〜〜と考えてたわけ。
fff=(Multi)foo;(Multi)foo(3);
fff=(Multi)func;(Multi)func(3);
としたかったのよ。でも無理だねぇ。
0304デフォルトの名無しさん
NGNGメンバ関数へのポインタのサイズはsizeof(void*)以上になることがあるよ。
0305デフォルトの名無しさん
NGNGtypedef void (*FUNC)(...);
FUNC fff[3];
void foo(...);
void hoge(...);
見たいなのか?
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGだから、まぁ、そうなんだけどさ・・・・
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG実行するとx=0ばっかり出てしまいます・・・
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
for(int i=0; i<=10; i++)
{
double x=rand()/RAND_MAX; //0〜1のランダムな数
cout << "xは" << x <<"\n" ;
}
}
0310309
NGNGこれで出来たような気がします。
0311デフォルトの名無しさん
NGNGC言語ではそうだね。
0312デフォルトの名無しさん
NGNGtemplate<typename R_Type,typename Seed>void caster(R_Type& lhs,Seed& rhs){
lhs=reinterpret_cast<R_Type>(rhs);
}
こんなのどうよ?
0313デフォルトの名無しさん
NGNGreinterpret_cast使った時点であぼーん決定。
0314デフォルトの名無しさん
NGNG代入時のキャストはそれでもいいけど、関数を呼ぶ時はどうすんの?
0315デフォルトの名無しさん
NGNGprintf("a=%d",a);←これであってますかね。
これを
std::cout<< <<std::endl;
を使うとどういうふうに書けばいいんですか?
0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGstd::cout<<"a="<<a;if(0)std::cout<<std::endl;
が正解だろ。
0319デフォルトの名無しさん
NGNGSeedがキャストされる前の型なんだから、それをどっかに確保して
関数呼ぶときにそれを使ってキャストしる。
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG318じゃないけど、
endl突っ込んだら改行しちゃうよ。
でもやっぱりif(0)以降はわかんにゃ。
0324323
NGNG0325デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGあー、そういうことか。
もとのprintfのほうには、"\n"で終端してないってことか。
しかし、それを「互換性無し」という318もなんだかなー。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNGint main()
{
int i = i; // (`へ´)
return 0;
}
0330デフォルトの名無しさん
NGNGvoid func() throw(); <- これです。
これを指定しておくと、どういう効果があるんですか?
throw()は例外を投げないという指定だと思いますが、
この内部で例外を投げると
1 無かったことになる
2 捕捉することが出来ない
どっちなんでしょうか?
VC++6.0しか持ってないので、確認できないんです。
0331デフォルトの名無しさん
NGNG3.異常終了します。
0332デフォルトの名無しさん
NGNGset_unexpected()で変更出来る
だったと思うけど
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGチャンスが与えられてる、ってのは大きな違いかも。
0336デフォルトの名無しさん
NGNGunexpectedハンドラの中から、メッセージループを実行したりして
そのままずーっと実行を続けてもいいんだろうか。
0337デフォルトの名無しさん
NGNGワラタ
やってみ。
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG謎な文章書かないでください。
0340338
NGNGこっちが正しいでありんす
ファイルがオープンできなかったら例外を投げるのはOKでしょうか?
0341デフォルトの名無しさん
NGNG例外を投げて処理するべきだろう。そうでもないなら
エラー処理の仕方の方針の問題な気がするのでてけとーにせよ。
0342デフォルトの名無しさん
NGNGいいんでないの?
MFCのCFileクラスもコンストラクタがそういうことしてるし。
0343お願いします
NGNGいま、LABをやっているんですけどこのheader file
を教えて下さい
0344デフォルトの名無しさん
NGNGLABって何よ?
0345デフォルトの名無しさん
NGNGhomework dedu
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNGマニュアル調べるなり検索するなりすれよ。
人をマニュアル代わりにすんなよ。
0348デフォルトの名無しさん
NGNG0349338
NGNG・・・・・
m(^▽^)mありがとうございま〜した。また次もおながいしまーっす
0350l
NGNGマスかけや
わかるかな?わかんねーだろな
0351デフォルトの名無しさん
NGNG俺はコンストラクタ以外に構築メソッドを用意せずに、どんどん例外を投げてるんだが。
たとえば、ファイルクラスでも、open/closeで一つのクラスを使い回すのは
あまり好きじゃないんで、construct/destructで一連の作業を終了させ、
再利用できないような設計してるんだけど。
0352デフォルトの名無しさん
NGNGワロタ
0353デフォルトの名無しさん
NGNG良いんではないかね。Javaもそうだし、リークに気を付けさえすれば、特に問題ないかと。
むしろ iostream とかがそういう風になってないのが嫌な感じ。
0354HHH
NGNG例えば「1234567890」という数値から「34567」という真中の桁だけ抜き出す
にはどうしたらいいんでしょうか?
0355デフォルトの名無しさん
NGNGlong n = 1234567890;
long x = (n / 1000) % 100000;
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG俺もそうしてるよ。いちいち「もしopenをやってないなら」とかチェックしなくてすむのがいいよな。
>>353はリークの心配をしてるみたいだけど、全部のクラスをそういう風に自己責任で
構築させるようにしていくと、必然的に、どんなタイミングで例外が出てもリークが
起きないようになっていくよ。
0358デフォルトの名無しさん
NGNGほんとのところ、例外のリークとかは実装時に考えることにして、
あんまり深く考えてなかったんだけど、たまたまMSDNの例外安全の文章を読んでたら、
出来る限りコンストラクタから例外を投げるなという記述があったんで、気になってた。
コンストラクタ内部で例外を捕まえなかったということは、
その例外からの復帰が不能だということだから、内部で無理に捕まえなくて、
呼び出し側に例外をスルーしちゃってもいいと思ってた。
もちろん、例外指定を行えずに未知の例外が飛んでくるわけだから、
あんまり関心出来た事じゃないとは思うんだけど、catch (...)で捕捉して、
オブジェクトの作成に失敗したと扱うのは、汚いコーディングなのかな、とか。
0359357
NGNGこのページのことかな?
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_exceptions.3a_.exceptions_in_constructors.htm
このページに限らず、MSDNの例外に対する記述って、やり方が古いんだよね…。
More Effective C++ 、Exceptional C++ に記述してあるやり方なら、なにも問題は
起きないはずだけど。
>呼び出し側に例外をスルーしちゃってもいいと思ってた。
いいと思う。俺はやってるよ。
ところで、「スルー」は「through」の意味で言ってるよね?「throw」は「スロー」…。
(いや、俺は例外を初めて見たときは読み間違えてたからね)
>catch (...)で捕捉して、 オブジェクトの作成に失敗したと扱うのは、汚いコーディングなのかな、
これもやってる。汚いとは思ってない。ただまあ、CFileの例外はEFile,CRegの例外はERegって
風にクラス分けはしているけど。
0360デフォルトの名無しさん
NGNGコンパイルエラーが出ます。
class Hoge{
public:
static Hoge& GetInstance(void);
private:
Hoge(void);
~Hoge(void);
};
Hoge& Hoge::GetInstance(void){
static Hoge obj;
return obj;
}
Hoge::Hoge(void){
}
Hoge::~Hoge(void){
}
error C2248: 'Hoge::~Hoge' : private メンバ (クラス 'Hoge' で宣言されている)にアクセスできません。
C++の仕様としては、このエラーはおかしくないですか?
ほかのコンパイラではどうなるのか、知ってる方は教えてください。
もしVC6だけのバグなら、.NETでは直ってるかどうかって情報も欲しいっす。
0361デフォルトの名無しさん
NGNGstaticメンバobjの宣言がHogeの中にない。
0362デフォルトの名無しさん
NGNGコンストラクタとデストラクタはpublicに置いて下さい。
0363デフォルトの名無しさん
NGNGあんたの言うC++の仕様って何?
おかしいと思う根拠は?
>C++の仕様としては、このエラーはおかしくないですか?
仕様と照らし合わせたんだよね?
・誰がHogeクラスのインスタンスを破棄するか考える
・破棄者はHogeのメンバであるか、お友達であるかよく考えてみる
0364デフォルトの名無しさん
NGNGコンストラクタがpublicだとどこからでもインスタンスが作れるので、
Singletonクラスとしてはダメな設計だろ
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNGおかしくない。obj のコンストラクタは、Hoge::GetInstance() が最初に実行
された時に呼ばれるが、デストラクタは、プログラム終了の一部 (= Hoge の外側)
で呼ばれるため。
0367デフォルトの名無しさん
NGNG「Effective C++の」とか言ってるくせに、実書のページすら書いてないところが嫌いです。
「仕様としては」とか言ってちょっと知ったかを気取ってみたりするところも嫌いです。
「他のコンパイラではどうなるのか、教えてください」とか言って自分で試さないのも嫌いです。
そして何より、「VC6のバグなら」「.NETでは直っている」とか言ってバグと決めつけているのが大嫌いです。
だから、僕はこのレスをつけてみようと思いました。
0368デフォルトの名無しさん
NGNG答えを書いちゃうなよ。
この場合、>>363を見て本人に考えさせるべきだったんだ。
0369デフォルトの名無しさん
NGNGなんだ、なんだ。なんか嫌なことでもあったのか ?
0370デフォルトの名無しさん
NGNGこの場合Hogeはstaticで定義されているから、GetInstanceを何度呼ぼうと
実体は一つしかないんだよね。
0372デフォルトの名無しさん
NGNGそうだけど、今問題にしている箇所はそこではないよ。
0373366
NGNG細かい突っ込みで申し訳ないけど、意図してんのは obj のことだよね。
で、実体が一つしかないのは C と同じなんだけど、C++ はコンストラク
タと、デストラクタがあるからそのタイミングが問題と言うだよね。
個人的な意見としては、static で定義されているオブジェクトは、
main() 呼ぶ前に構築して、main() 終了後に破棄すると言う仕様の方が
わかりやすいと思う。もちろん、実際に使うオブジェクトだけ構築する
今の仕様の方が効率はいいと思うけど、ちょっとやりすぎな気がする。
0374デフォルトの名無しさん
NGNG0376360
NGNG改訂2版のEffective C++ では、241ページ以降に書いてあります。
項目47、「非ローカルスタティックオブジェクトは、使用前に必ず
初期化されるようにしよう」です。
>C++の仕様
俺が調べたのはARMの記述です。これに関しては手元に本がないのでちと記憶が
曖昧ですが、「デストラクタもほかのメンバ関数と同様に、明示的に呼び出すことも、
アクセス制限を加えることもできる」ってな感じのことが書かれてました。
ARMは仕様書じゃないって? そのとおりですな。すみません。「仕様」は
言いすぎでした。回線切って首をつるほどじゃないけど、反省します。
>誰がHogeクラスのインスタンスを破棄するか考える
>破棄者はHogeのメンバであるか、お友達であるかよく考えてみる
>>366でも答えは書いてありますけど、Modern C++ Design(和書のほう)の
143ページにも答えは書いてあります。詳細な擬似コードまで示して。
でも、そのModern C++ Design の141ページで、コンストラクタも
デストラクタもprivateで宣言されて、シングルトンを実装されてるんです。
で、この記述に沿って実装しようとしてエラーが出たから、なんでじゃー、
と思ったわけです。
……最初からModern C++ Design のことを書いときゃよかったっすね。
0377デフォルトの名無しさん
NGNG>>366がおかしくないと言ったのは、あんたのコードがおかしくないじゃなくて、
エラーがおかしく無いという意味だろ。
Effective C++だとデストラクタはprivateで宣言されていない。
Modern C++ Designは持ってないから確認できないが、
そのSingletonはローカルstaticオブジェクトを返しているか?
newしてそのインスタンスを返してるんじゃないのか?
その場合は、破棄をしないか専用のdeleterを用意しているはず。
0378デフォルトの名無しさん
NGNGHoge& Hoge::GetInstance()
{
static Hoge* pHoge = NULL;
if (pHoge == NULL) {
lock();
if (pHoge == NULL) {
pHoge = new Hoge;
}
unlock();
}
return *Hoge;
}
こんな感じじゃないのか?
0379デフォルトの名無しさん
NGNGint i;
for(i = 1;i < 10;i++)
cout<<((p = strstr(s[i],s[0]))?p:'@')<<endl;
これ、どこかマズイでしょうか?
まずそうな個所を指摘してください。お願いしますね
0380デフォルトの名無しさん
NGNG単純なstatic objectだし、確かにデストラクタをprivateにしてるし、
しかも利用者に勝手に開放させないためと本文にわざわざ明記してるので
コードの誤植とも考えにくいな。
0381デフォルトの名無しさん
NGNGその質問は何のためにしているんだ?
エラーが出て解決できずに困っているのならそのエラーを書くこと。
動作が意図と違うのならどんな意図をしているのかを書くこと。
単にスタイルの問題を指摘ほしいのなら、そう書くこと。
宿題ならスレ違い。
0382デフォルトの名無しさん
NGNGbcc 5.5.1 NG
gcc 2.95.3-4 OK
digital mars 8.26n OK
0383デフォルトの名無しさん
NGNG10という決め打ちもいくない。
0384デフォルトの名無しさん
NGNGVC++はあまりMOdernじゃないから、そのままやってもうまくいかない場合があるぞ。
0385379
NGNG本当は自作のstrstrがstrings名前空間に入ってるんで
そのテストとしてやってたんですが
三項演算子の偽部分が「'char' 型は 'char *' 型に変換できない」
ていわれるんです。
何故でしょうか?
0386デフォルトの名無しさん
NGNG具体的には、3項演算子で (省略)p:'@'で、
pがchar*
'@'がchar
です。
"@"とかにしましょう
0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNG>>383ってことだな
三項演算子の真と偽は同じ型でなきゃいかんだけの話
0389379
NGNGうーん知らなかった(._.;)
0390デフォルトの名無しさん
NGNG本を読み返してみます(._.;)
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNGつーか、代入しないなら if() 使えよ。
>>388
ウソ書くなよ。double = xxx ? double : int; とかでも大丈夫だよ。
あくまでも、代入先の型と合わないと言っているだけで、真と偽の型が違
うから怒っている訳じゃねーぞ。
0393360
NGNGあ、>>366の意味はわかってます。けど、俺の書き方がまずかったですね。
誤解を招くような書き方でした。
>>382
ありがとうございます! やっぱりコンパイラ次第では通るんですね。
ところで、これを全部ひとりで確認されたってことは
全部インストールされてるってことですよね……。
俺も複数のコンパイラをインストールして、今度からは自分で確認
するようにします。
0394デフォルトの名無しさん
NGNGいや、通っちまうのは変でしょ。そっちのほうがバグだと思うけど。
つか、Modern… の 6.3 と 6.4 は切り離して読んだほうがよい。
6.4 はあくまでも Meyers' Singleton に対するコメントでしょ。
6.3 (つまり筆者がやろうとしている方法) とは関係ない。
0395360
NGNGたしかにそう解釈もできますけど……。
けど、6.5のソース(145ページ)はどうします?
privateデストラクタと、Meyers' Singletonの両方を組み込んだ
ソースがばっちり載っちゃってるんですが。
0396360
NGNGたしかにそう解釈もできますけど……。
けど、6.5のソース(145ページ)はどうします?
privateデストラクタと、Meyers' Singletonの両方を組み込んだ
ソースがばっちり載っちゃってるんですが。
……というか、この問題に決着をつけるのは、『プログラミング言語C++』で
どう記述されているか、しかないと思います。
俺、持ってないんですよね。お金に余裕が出来たら買って読みますけど、
その前に、持ってる人おられましたら教えていただけませんか?
(なるべく、該当部分の記述をそのまま引用していただけたら嬉しいです)
0397360
NGNG0398デフォルトの名無しさん
NGNG買わなくてもwebに資料あるぞ
http://joda.cis.temple.edu/~ingargio/refman.pdf
0399デフォルトの名無しさん
NGNGif-elseを一行にすっきりとかけてなんかいい感じじゃん。
0400デフォルトの名無しさん
NGNGところがDos窓だと25行しかでないので、データのコピーができません。
ここで、スクロールバーが出せれば上のほうにさかのぼってコピーできるのですが・・・
CSV形式でファイルに出力という方法も考えたんですが、こっちは難しそうなので・・・
キーワードだけでもいいのでご存知の方教えてください。
0401デフォルトの名無しさん
NGNGなんだかよくわからんが、>や>>をつかってファイルにリダイレクトする方法じゃだめなの?
0402デフォルトの名無しさん
NGNG一番簡単なのはリダイレクト
0403デフォルトの名無しさん
NGNGほげほげ(EXE名) >ほげほげ.csv[リターン]
と入力すればよろし
0404400
NGNG特に指定しない限り、出力はすべて画面に表示されます。
-o オプションを使うと、画面出力をページ単位で停止し、キー入力を待つことができます。
これはコマンド ラインを手入力する場合に便利です。
また、同じ -o オプションを使って、出力を無効化またはリダイレクトできます。
ってのがヘルプで出てきたんですが、どこにコマンドを入れるのかさっぱりです。
ちなみにC++と書きましたが、Visual C++ 6.0です。
0405デフォルトの名無しさん
NGNG開発環境は関係ない。
コマンドの最後に >file.txt と打てば、file.txtという名前のファイルに(標準出力が)出力される。
追加書き込みの場合は>>で。
0406405
NGNG現在のディレクトリの中にflist.txtというファイルができて、dirの出力結果が書き出されているはずだから。
0407デフォルトの名無しさん
NGNGむきゃー!!
...みんなに内緒でおしえてあげる。
スタートメニューからDOSプロンプトを立ち上げて、
あなたのプロジェクトのDebugもしくはReleaseフォルダに移動します。
それであなたの
[プログラム名] > [出力ファイル名][ENTER]
だってばサ。
0408デフォルトの名無しさん
NGNG>file.txtという名前のファイルに(標準出力が)出力される
標準出力が端末画面からファイルに切り替えられて、
file.txtという名前のファイルに出力される
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNGむきゃー!!
0411400
NGNGありがとうございます。
追加になりますが、スクロールバーを出す方法とかはないんですか?
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGconsize + cmd-reactos を使え。
http://www.neuro.gatech.edu/users/cwilson/cygutils/consize/
http://www.neuro.gatech.edu/users/cwilson/cygutils/cmd-reactos/
0414デフォルトの名無しさん
NGNG0415400
NGNG学校はWin2kだったから普通に出たのか。
この板ははじめて来たのですが、いい人がいっぱいいるようですね。
色々お世話になりました。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG違う。答えられればなんでも答えるスレ。
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNGTCHARベースでうまく動かす方法はないですか?
char_traitsがMBCS対応してないので今は自分で作っちゃってますけど、
なんか納得行かないんです。
0423デフォルトの名無しさん
NGNGそれよりboostをVCで使う意味がわからんのだが。
それなりのスキルを持ってるんだったら、
なっとくいく自作ライブラリを作ったほうがよいとおもうのだが。
0424デフォルトの名無しさん
NGNG> それなりのスキルを持ってるんだったら、
> なっとくいく自作ライブラリを作ったほうがよいとおもうのだが。
Boost 並のクオリティのライブラリを書くのは「それなり」のスキルでは厳しいと
思う。あるモノは素直に利用しようよ。(ライセンスも緩いことだし)
0425デフォルトの名無しさん
NGNGv(^・^)v
0426デフォルトの名無しさん
NGNGv(^・^)v
0428デフォルトの名無しさん
NGNGLispに比べれば・・・比べちゃいかんのかもしんないけど。
0429デフォルトの名無しさん
NGNGLISP も、慣れれば特に読みにくくないぞ。まあ、括弧が多くてウザイから、
きちんとインデントしてないとつらいけどね。
でも、C/C++ でも
if(x == 0){ int y; y = x + 1; if(y == 0){ int z; x = y + 1; printf...
なんて書いてあったら、萎えるよ。要は、きちんとインデントして普通に書けって
ことだよ。
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG}}}}}}}} <-これ、ダサい(C++)
いや、マジでいたんだよ、びびった。
0432デフォルトの名無しさん
NGNG見てみたいYO!
0433デフォルトの名無しさん
NGNG4章に出てくる auto_ptr_ref ってどう役立っているのですか?
動きが(゚д゚)サパーリです。。。
0434デフォルトの名無しさん
NGNGint a[][][]....[];
のような配列の次元数をダイナミックに扱う
方法ってあります?
0435デフォルトの名無しさん
NGNG0436435
NGNG~( )−
/ >
0437デフォルトの名無しさん
NGNG二次元以上の配列の動的確保ってどうやんの?
0438デフォルトの名無しさん
NGNG0439438
NGNG~( )−
/ >
0440デフォルトの名無しさん
NGNG一次元以上
0441デフォルトの名無しさん
NGNGこういうのとかではなく?
0442434
NGNGint a[][];→int a[][][];
と実行時に、配列の次元数を変えたいのです
やっぱ無理かな?
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGこのスレの >>175 ぐらいから嫁。
0445デフォルトの名無しさん
NGNGそうね。正道。
>>442
個人的には、operator[]に拘らなくていいなら
class Dims {
public:
int iSize;
vector<Dims *> Next;
Dims(int size) { iSize = size; Next.resize(iSize); }
};
で配列の実体確保は、Dims.iSizeの積で求めて、new int[]する
のようなのは思い付くけど、それじゃあだめなんだよね...
0446515
NGNGoperator[] に拘るのはちょっと難しいかと...。次元が可変なんだから
コードの書きようがないと思う。
>>442
つーか、どういう使い方するんだ ? 単にできるかどうかが問題なの ?
0447デフォルトの名無しさん
NGNGそういう基本的な文法では対応してないです。
でもこういう場合、「設計直せ」の方がいいと思う。
0448初心者
NGNG教えてもらえますか?スピンコントロール2個を連動させるという
設定をしようと思っているのですが、どうもうまくいきません。
合計の最大値が決まっていて最大値から片方のスピンの値をマイナスした
値がもう一方のスピンの最大値になる、という形を作りたいんです。
今のところ下記のようなコードを書いたのですが、なぜかエラーが・・・
どこか間違っている所などあったら教えてください。
BOOL CDialog2::OnInitDialog()
{
CSpinButtonCtrl* pSB1 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);
CSpinButtonCtrl* pSB2 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN2);
pSB1->SetRange(0,40);
pSB2->SetRange(0,40);
return FALSE;
}
void CDialog2::OnKillfocusEdit1()
{
max1 = GetDlgItemInt(IDC_EDIT1,NULL,FALSE);
mm_max2 = 40-max1;
pSB2 -> SetRange(0,mm_max2);//ここで問題が起きてるみたい・・
}
void CDialog2::OnKillfocusEdit2()
{
max2 = GetDlgItemInt(IDC_EDIT2,NULL,FALSE);
mm_max1 = 40-max2;
pSB1 -> SetRange(0,mm_max1);
}
長くなってしまってすいません・・・よろしくお願いします。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGなんですか、あなたは
答える気がないなら黙っていてください。
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGなんですか、あなたは
マナーを守れないなら黙っていてください。
0453初心者
NGNG0454デフォルトの名無しさん
NGNG■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/test/read.cgi/tech/1014057520/
0455初心者
NGNG皆さん失礼しました。
0456初心な人
NGNGクラスが別のファイルに定義されているときはどう書くんでしょ
う?extern class aa;と書いたらおこられちゃった。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG>ポインタ変数の大きさはintの大きさと同じではない。現状sizeof(int) = 4, sizeof(void*) = 4の環境が多いが,64bit環境ではsizeof(int) = 4, sizeof(void*) = 8となる場合がある。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNG普通、クラスの定義はヘッダーファイルに書いて、使う側とインプリメン
トする側で同じヘッダーファイルを読み込む。
--- aa.h ---
class aa {
private:
...
public:
aa();
~aa();
};
-- aa.cpp --
#include "aa.h"
aa::aa()
{
...
}
aa::~aa()
{
...
}
-- file.cpp --
#include "aa.h"
void foo()
{
a aa;
...
}
と言う感じ。(ANSI-C なら、関数プロトタイプでも同じようにやると思う
けど...。)
0462初心な人
NGNG必ずヘッダーファイルを別にしておくのね。
0463デフォルトの名無しさん
NGNG0464A子
NGNG0465デフォルトの名無しさん
NGNG関数のdefineの方法が本読んでもよく分からないんです。
誰かおせーてください。
0466デフォルトの名無しさん
NGNGPerlにはdefineっていう関数だか演算子ががあったけど
0467デフォルトの名無しさん
NGNGdefine?
#defineのこと?
0468デフォルトの名無しさん
NGNG0469465
NGNG#defineのことです。
0470デフォルトの名無しさん
NGNG関数に#defineは使わないと思うけど…
何したいの?
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG漢ならdefineの代わりにinlineとconstをできるだけ使え。
0473デフォルトの名無しさん
NGNG0474465
NGNG#defineじゃなくてtypedefでした。
スマソ
0475デフォルトの名無しさん
NGNGる場合も結構あるんだよなぁ。普段はReleaseでビルドしてとめた
い時だけDebugってやってるけどちょっと面倒。
0476デフォルトの名無しさん
NGNGtypedef 新しい型名 既存の型名
typedef UINT unsigned int;
これでUINTはunsigned intと同じものに。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNGだっけ。
忘れた。
0479476
NGNG関数へのポインタをtypedefするのだろうか・・・・
0480デフォルトの名無しさん
NGNGtemplate <typename T>
struct my_vector {
std::vector<T, my_allocator<T> > t;
};
とかやってるけど、やっぱ面倒だよ。
# と、愚痴ってみる。
0481デフォルトの名無しさん
NGNG逆だろ
typedef unsigned int Uint;
0482デフォルトの名無しさん
NGNGOops!
そうだった・・
0483デフォルトの名無しさん
NGNG# ちょっと482には仕事たのめないな。(藁
0484デフォルトの名無しさん
NGNGtypedefなんて使わないし・・・
分かりにくくなるから。
typedef struct{}←これ嫌い。
0485デフォルトの名無しさん
NGNG単に関数の宣言書いて、前にtypedefつければよろし。
ポインタとして宣言するなら>>478。
0486デフォルトの名無しさん
NGNGそんなことは無いだろ。
分かりやすくする為にあるんだぞ。
0487デフォルトの名無しさん
NGNG型が増えると分かりにくくなる。漏れ馬鹿だから。
せめて構造体はtypedefしないでほしいな。
0488465
NGNG}
の場合、typedef int* BETSUMEI( char* a )ってこと?
0489デフォルトの名無しさん
NGNGお前もういっぺん478嫁
0490デフォルトの名無しさん
NGNGそれだとint型へのポインターを返す関数になってしまう。
int (* BETSUMEI)(char *a)とやらないと。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGライブラリ内で規約を設ければ解かり易くもなるが、
アプリ側ではタイプ数減らすために使うほうが多いだろうな。
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG括弧を付ける理由が今わかった。
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG演算子の優先順位表を頭に焼き付けてきました。
仕事ください。
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNG現在就職活動真っ最中でして・・・・
内定ください。
0500デフォルトの名無しさん
NGNGなんか神が降りてきた・・・・
0501デフォルトの名無しさん
NGNGん?失敗か。
何みてんだゴルァ!!
Borland C++ Builder 6をよろしくね☆
http://www.borland.co.jp/cppbuilder/
0502465
NGNGtypedef int(_stdcall *KANSUMEI)(char* a);
↑こーゆーのはまだ意味わからんですが、
漏れがんばる。
0503デフォルトの名無しさん
NGNG||
||
|| スルスル
||
∧||∧
( ⌒ ヽ 神です・・・・
∪ ノ
∪∪
0505500
NGNGキタキタキタ━━(゚∀゚;)━━!!!
なんでも俺に聞け!!任せろ
0506デフォルトの名無しさん
NGNGお休み
0507デフォルトの名無しさん
NGNG0508465
NGNG漏れアセンブラしか分からんす。
高級言語はどーも苦手。
と言ってみたいという願望を書いてみるテスト。
0509デフォルトの名無しさん
NGNGむきゃー!!
く・や・し・いぃぃぃーーーっ!!!
0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNGOOがウマー(´Д`)
0512Ð ë á t h ¹³
NGNG∧||∧
( ⌒ ヽ 500が消えたので
∪ ノ 上へまいりま-す・・・
∪∪
⌒
⌒
0513465
NGNG0514デフォルトの名無しさん
NGNG誰かおしえてプリーズ!
0515デフォルトの名無しさん
NGNG何らかのエラーが生じた時、通常は戻り先でelse ifの連続ショーが始まったり、
エラー処理があちこちでバラバラに分散してしまうが、例外にすると、エラー
処理を一カ所にまとめられるので見やすい。バグが出にくい。等々
0516デフォルトの名無しさん
NGNGCのエラー処理と比べるとだいぶウマーな漢字になってます
0517465
NGNG教えてあげたいところですが、
例外処理の意味すら分かりません。
出直してきます。
0518デフォルトの名無しさん
NGNG何十にもネストしたループを脱出す時はgoto使うと便利でしょ?
同じように、関数呼び出しから一気に巻き戻すのに例外は便利なのだよ。
C言語では関数外にジャンプするときはsetjumpとlongjumpを使うが、こ
れではデストラクタが呼ばれないので例外って仕組みが必要なわけよ、オーケイ?
0519デフォルトの名無しさん
NGNGCで言うと、longjmp、setjmpとよく似ている。これらをよく観察すれば、
例外の意味も少しわかると思います。
0520デフォルトの名無しさん
NGNG割り込みスマソ
longjmpに似ているということは、一度通った場所にしか戻れないの?
0521デフォルトの名無しさん
NGNGエラーの取り残しがないって事かな。
戻り値で判定する場合、ifでチェックし忘れたエラーコードは検出できないけど、try/catchなら、チェックしなかったエラーはより上位のcatchに飛ばされるから、必ずどこかでつかまるよね。
0522デフォルトの名無しさん
NGNGどちらかと言えば、longjmp,setjmpで例外の真似事ができるって方が近いかな。
例外は戻るのではなく、投げるものなのでcatchがあるところまで間をすっ飛ばし
ます。先月のインターフェースにCで実装する例外って記事があったよ、確かに、
longjmpとsetjmp使ってたはず。
0524デフォルトの名無しさん
NGNGそそ。関数から関数を多重的に呼び出している時、returnで戻ろうとすると
プログラムが超複雑になりますよね。それを例外で一足飛びに戻る。
もしくは途中まで戻って、ある程度仕事をしてから、また再throwする、など。
0525514
NGNG私の場合、プログラムの実行継続が難しいときに
例外を投げるという使い方をしようとしてました。
が、STLのbad_allocくらいしかcatchするものが無い・・・。
例外処理に払うコストが妥当とは思えないわけです。
何か、こういう例外の使い方がウマい!とかありませんでしょうか。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGファイルクローズして返すのが面倒くさいから、入力処理と
入力ストリームのエラーチェックを同時に行う関数を用意して、
エラー発生時に例外を投げるようにしてます。
0528デフォルトの名無しさん
NGNGそれって、?stream.exception(mask) じゃだめ?
0529デフォルトの名無しさん
NGNGぁ・・ホントですね、そのまんまの機能です。
知りませんでした。_φ(.._)
0530デフォルトの名無しさん
NGNGなにそれ?
0531デフォルトの名無しさん
NGNG例外型の他は概ね利用方法が思い浮かぶのですが、
domain_errorだけどうしても使い道がわからないのですが。
0532528
NGNGexceptions(iostate) で、ストリームがthrowする例外を選択する。
ifstream file(filename);
file.exceptions(failbit|batbit);
これ以降の操作で失敗したり、ストリームが壊れたりしたらfailure例外が投げられる。
上の例だけでもコンストラクタでオープン失敗してたときは、
exceptions()の呼び出しが例外投げる。
0533デフォルトの名無しさん
NGNGThrown by the library, or by you, to report domain errors (domain in the mathmatical sense).
googleのトップにでてるじゃねぇか。
0534デフォルトの名無しさん
NGNGま、使用方法が思い浮かばないのは漏れの数学知識が
皆無だからでしょうね。
0535デフォルトの名無しさん
NGNGpublic:
X(){
cout<<NAME[0]<<endl;
}
};
これって不可能?class自体はエラー出無いんだけど、実体とると
こけてしまう。
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGtemplate難しいわ。例えば、
template<char* n>class X{
public:
X(){
cout<<n<<endl;
}
};
void main(void)
{
X<"aswe"> x;
}
なんて言うか、これってできないの?それても俺の書き方がおかしい?
0538デフォルトの名無しさん
NGNG外部リンケージを持ったchar[]を渡しましょうや
ていうか入門書にそんくらい書いてあるだろ。
0539デフォルトの名無しさん
NGNG規格書読めよ。
14.3.2 Template nontype arguments
2 [Note: A string literal (2.13.4) is not an acceptable template argument
because a string literal is an object with internal linkage. (後略)
0541初心者にもなってない
NGNG候補としては「C」か「C++」なのですが
どちらのほうがいいんですか?
できれば長所短所をおしえてもらいたいのですが。
0542デフォルトの名無しさん
NGNGそれ以外に選択肢は無い。
0543デフォルトの名無しさん
NGNG2 作りたい物があって、そのためにプログラミングを勉強したい
1ならJavaかC#にしておけ。
SchemeとかMLでもいいが、勉強結果が後々使い回し出来ないと思った方がいい。
2ならC++を勧めておくが、出来るなら他言語を勧める。
0544デフォルトの名無しさん
NGNGで、Cは?
問題外?
私は「プログラミングを勉強したい」という理由ならCを薦めるね。
0545デフォルトの名無しさん
NGNGたしかにC勉強して身に付くこともあるが、
今から始める人にそんな低レベルな概念から身につける必要は無いと考える。
もちろん、分野によってはCは必須だが。
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGそれだけだとつまらんはずだから、プログラミングと平行で。
独学でプログラムだけやってもろくなもんでてこない。
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG思い切ってC++にチャレンジしてみよう!
0550デフォルトの名無しさん
NGNG鏡見れば思い出すかも
0551デフォルトの名無しさん
NGNG王道を突き進め
0553デフォルトの名無しさん
NGNG計算機科学をまじめにやるならScheme+SICP
作って動かしてみて楽しいのがいいならHSPやJavaScript
作りたいものの規模が大きそうならJava
シューティングゲームとかならC/C++
って感じか。
いずれにしても、身近に詳しい人がいて、いつでも質問できるのが理想、ですかね。
0554デフォルトの名無しさん
NGNG文系ならオブジェクト指向はわかり易いものだろうが、理系は多態性
を追っかけにくいとかいうようだ。本人のバックグランドをキボーン。
0555デフォルトの名無しさん
NGNGthisとかselfの概念があった方がやりやすい。
0556デフォルトの名無しさん
NGNGどちらかというとOO向け言語にある仕組みや仕掛けが好み。
0557デフォルトの名無しさん
NGNGGenericsマンセー
0558デフォルトの名無しさん
NGNGGenericsはOOちゃうやろ。
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG(明示的)インライン関数やテンプレートを使うと
関数名 はすでに オブジェクトファイル名 で定義されています
と言われてしまいます。
いくつかの .obj に分けてコンパイルしているので、確かにそれぞれの .obj に重複定義されているのですが、こういうやり方はおかしいのでしょうか?
(別々にコンパイルしているので #ifndef --- は効きません)
普通はどうするものなのでしょう?
0562デフォルトの名無しさん
NGNGヘッダに全部書いてそれぞれインクルード、の逃げ解決が普通かと。
0563デフォルトの名無しさん
NGNGtemplate <class T>
class C {
public:
void func();
};
// c.cpp
#include "C.h"
template <class T>
void C<T>::func()
{
return;
}
// main.cpp
#include "C.h"
int main()
{
C<int> c;
c.func();
return 0;
}
VC6.0でこれをコンパイルすると
「error LNK2001: 外部シンボル ***** は未解決です」
ってエラーが出るんですけど、よくわかりません。
いまは、c.cppの内容をc.hの下に書いていますが、
どうにか上のファイル構成で、コンパイルできるようにならないでしょうか?
お願いします。
0564デフォルトの名無しさん
NGNG2chでお願いしてもコンパイラの動作はかわらねぇな。
で、ファイル構成は変える気が無いと・・・。
c.hの最後にc.cppをインクルードでいけるか・・・。
それはそうと、外部シンボルの未解決がよくわからんってのはカナーリイタイね。
0565563
NGNGmain.obj : error LNK2001: 外部シンボル ""public: void __thiscall C<int>::func(void)" (?func@?$C@H@@QAEXXZ)" は未解決です
です。説明が足りませんでした。
すみませんでした。
0567561
NGNG勘違いでした^^;
ヘッダに実装も書いていたのですが、そこにうっかり普通の関数を混ぜてしまっていたのが原因でした
(戻り値がテンプレート型だったため「ありゃ!テンプレートが重複してるってエラーだよ!!」と思ってしまったのです)
>>562さんのレスを読んで冷静になれたので気づきました。
ありがとうございました。
0568561
NGNGなんか私のと似たような質問だな…。と思いつつペイフォワードしてみよう。
何が起こってるかがわからないですか?
それはテンプレートが展開されないから、.obj に実装が含まれてないんだと思いますよ。
0569デフォルトの名無しさん
NGNGc.cpp の末尾に
template class C<int>;
を入れるよろし。
0571デフォルトの名無しさん
NGNG鬱だ死のう(-_- )
0572デフォルトの名無しさん
NGNGもらえないでしょうか?お願いします。
0573デフォルトの名無しさん
NGNGios::のコード嫁。
ios::のマニュアル嫁。
読んだら作れ。
0574デフォルトの名無しさん
NGNGtemplate<class X, class Y>で受け取っちゃってるので、さっぱり想像できません
0575デフォルトの名無しさん
NGNG例えば、今俺の手元にあるSGI版ならこんな風になっとる。
> template <class _InputIterator, class _Distance>
> inline void advance(_InputIterator& __i, _Distance __n) {
> __STL_REQUIRES(_InputIterator, _InputIterator);
> __advance(__i, __n, iterator_category(__i));
> }
第三引数がbidirectional_iterator_tagの __advance と
random_access_iterator_tag の __advance が多重定義されてるので
上手いこと処理が分かれる。
それ以上のことは iterator_traits とかなんとかその辺でも調べるべし。
0576デフォルトの名無しさん
NGNGタグディスパッチ
http://www.boost.org/more/generic_programming.html#tag_dispatching
(どこかに邦訳があった気がするが)
0577デフォルトの名無しさん
NGNGそこらへんの説明は、『Generic Programming ―STLによる汎用プログラミング―』
(アスキー)に詳しい。
0578デフォルトの名無しさん
NGNG/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ○真面目に投票したい人は
| 日頃からプログラマー板にお世話になっている方、
| みずほの一件でプログラマーを応援したい方々。
| 普通に<<プログラマー>>で投票をお願いします。
| 清き一票を! / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\__ __________ | ●不真面目な人達は
∨ Cafe de Biz CUBE | 期待されているからには何かをやらねば!
∧_∧ ∧_∧ | やはりここはマ板らしく、明らかに不正な
( ・∀・) (´∀`;) < ダントツ1位(でも無効票)を狙いましょう。
( つ )つ□ □ ⊂( ) | 真面目に投票する人の迷惑にならないよう、
┃レ __ | ̄ ̄ ̄ ̄ | .___ノ┃ | ネタ仕込みの方々は<<デスマーチ>>で投票。
┗━┳┳\ | ̄ ̄ ̄ ̄| ./━┳┳┛ | 汚れた一票を!
┃┃ |_____| .┃┃ \____________
天災もとい転載歓迎。自由にコピペどうぞ。
0579デフォルトの名無しさん
NGNGテンプレートでパラメータクラス内のメンバ探索のための __if_exist とか
親クラスの探索のための __super とか
処理系依存というのが嫌だけど・・・
0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNGアイディアモリ森!!!!
0584デフォルトの名無しさん
NGNG|_|。▽゚) <イソライソアセソブラの出番だふぉるぁ〜アヒャッ
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄
0585sage
NGNGチュゥしちゃおう(*^3)
0586デフォルトの名無しさん
NGNGありがとうございました。
あんまり綺麗な解決方法じゃないなぁとか思ったけど。
しょうがないのかな
0587デフォルトの名無しさん
NGNGboost ML でつい最近こんな話が出てたヨ。
http://lists.boost.org/MailArchives/boost/msg29007.php
0588デフォルトの名無しさん
NGNGpublic:int plus(int a,int b){return a+b;}
};
と書いて、
int c=PLUS().plus(12,12);
と書かなきゃいけないんだけど、
int c=PLUS(12,12);
と書きたい場合はどうすればいい?typedef,defienなしで。
コンストラクタにしたらreturn出来ないし・・・・・・
0589デフォルトの名無しさん
NGNGoperator()を使えば
PLUS()(12,12)とは書けそうな気がする。
0590微妙・・・
NGNGint buf1,buf2;
public:
int plus(){return 0;}
PLUS(int i,int n):buf1(i),buf2(n){}
operator int(){return buf1+buf2;}
};
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG0594588
NGNG感謝感激雨あられ〜〜〜〜♪ありがとぉ
0596588
NGNGすみません
593さんの言うように「関数オブジェクト」というものの話を聴いて
作ってみたくなりまして。関数のように使うクラスであるからには
PLUS().plus(....)では醜いかな、と。
0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNGint operator()(int i,int n){return i + n;}
てなやつを
Type obj;
int j = obj(12,12);
てなやつよん?
0599588
NGNG「関数オブジェクト」と言うからにはクラスを関数みたいに使えるように
するものだろうと、勝手に推測したんですが。
0600デフォルトの名無しさん
NGNGそれじゃ「関数オブジェクト」じゃなくて「関数クラス」になっちまう。
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNGstroustrup
禿てるけど(・∀・)カコイイ!!
ジェームスゴスリングより
(・∀・)カコイイ!!
0605デフォルトの名無しさん
NGNG併用してナンボだとおもうが。
0606デフォルトの名無しさん
NGNG普通の関数より便利?
0607デフォルトの名無しさん
NGNG一種のクロージャとして利用することが出来る。
0608デフォルトの名無しさん
NGNGぐ・・・・具体例を・・・おねがい
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNGtemplateと合わせると、関数ポインタよりはinline展開が効きやすいかもしれない。
0611初心な人
NGNGiostream.hにあるform()を使えとか書いてあるけど、g++した
らエラーだったし。
0612デフォルトの名無しさん
NGNGいや、かっこよく写るように下から写している。
正面から写っているのはしょぼいぞ
0613デフォルトの名無しさん
NGNGhttp://www.research.att.com/~bs/homepage.html
0614デフォルトの名無しさん
NGNGweak_ptrのところに
> When the object last shared_ptr to the object goes away and the object
> is deleted, all weak_ptr objects have their stored pointers set to 0.
という英文があるんですけど、When 以下が良く分かりません。どういう時に
ポインタを0にすると言ってるんでしょう?last がどこにかかるのか分かって
いないだけだと思うので、英語の問題だからスレ違いと言えばスレ違いかもし
れませんが、たぶん使ってる方がいらっしゃるだろうと思うのでここで質問さ
せて下さい。
0615デフォルトの名無しさん
NGNGそれを参照しているすべてのweak_ptrが0にセットされるってことだろ
0616614
NGNGはい、たぶんそんなような感じなんだろうなというのは分かるのですが、last
の意味がイマイチ掴めないんですよね・・・
とりあえずオブジェクトが破棄されたらゼロっつーのは分かるのですが・・・
0617デフォルトの名無しさん
NGNG一番最後にオブジェクトを参照していたshared_ptrが破棄さて(=参照カウントが0になって)
オブジェクトが破棄されたら〜 ってそのままじゃねーか。
0618614
NGNGWhen the object pointed by last shared_ptr goes away.....
って事ですか。ありがとうございます。
last が動詞なのかと思ってワケワカになっとりました。
スレ汚しスマソ。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGツボにはまると、理解できなくなることはある。大目に見といてやれよ。
0621デフォルトの名無しさん
NGNG色々異なるしな。
書き癖がつかめるまでは他のを読んでる場合でも?なことがある。
英語に達者な人はうらやましいねえ。
0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG洋もののエロ小説とかpenthouseとかはすらすら読めるのになあ。
0624デフォルトの名無しさん
NGNG褒めて欲しい? それなら技術系の板よりも、馴れ合い系の板に行くことを
薦めるが。
0625デフォルトの名無しさん
NGNGあと、大統領候補者の演説が、以外にわかりやすい。
0626デフォルトの名無しさん
NGNG教育をロクに受けてない連中にも理解できるようにしてるのよ
0627JFK
NGNGWe chose to go to the moon in this decade and do the other things,
not because they are easy, but because they are hard.
0628デフォルトの名無しさん
NGNG基本的には知ってる単語ばかりだし、推測ができるし。
0629デフォルトの名無しさん
NGNGこちらに書かせて頂こうと思います。
メモリ上にあるビットマップのピクセルへのポインタを取得し、
インクリメントで1つ1つのピクセルを調べていくプログラムを
書いていたのですが、
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
if (*pBits = 0x00FFFFFF) { // 色を調べる
// 中略
}
pBits++; // ポインタをインクリメント
}
}
↑これはうまくいったのですが、
例えば任意の座標を調べたいときはどうすればよいのでしょうか?
*(pBits + x + y * width)だと実行時にエラーが出ました。
C++のポインタの基本のようなことだと思うのですが
よろしければ教えてください。
0630デフォルトの名無しさん
NGNGほんとにそのコードがうまくいったのか小一時間問い詰めたい。
1pxは何バイト?
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNGそこには突っ込んでやるな
0633デフォルトの名無しさん
NGNGもちろんビットマップはトップダウンだよね。
0634デフォルトの名無しさん
NGNG0635629
NGNGポインタは
COLORREF *pBits;
なのですが(COLORREFはWindowsの型で、=ダブルワードのようです)、
インクリメントでちゃんと次のピクセルを指してくれているようです
(つまり予想通りの結果になりました)。
また、ビットマップはボトムアップで、32bit(パレット無し)です。
(ループの部分ではxとyはループのカウントにしか使ってないです)
インクリメントで型サイズ分ポインタが進むのなら、と思ったのですが
普通の加算でダメだった理由がわかりません・・・
初心者なものでいまいち上手く説明できないですが
よろしくお願いします
0636デフォルトの名無しさん
NGNGBitsに定まった型はない。
0637デフォルトの名無しさん
NGNG0638629
NGNGどうやら画像のサイズをはみでていたようです。
レスありがとうございました。
回線切ってマウスのコードで首吊(以下略
0639デフォルトの名無しさん
NGNG代入してることには突っ込まなくてよかったのか?
0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNG>>631みれ
0643デフォルトの名無しさん
NGNGどうおもう?
0644643
NGNG誤爆しました、スマソ
0645デフォルトの名無しさん
NGNGzukei circle[1000];
zukei square[1000];
としたとき、マルの色、四角の色をそれぞれ、いっぺんに
赤、青にするのはどうしたらいいんでしょう?
for(int i=1;i<1000;i++){circle[i].color=red;}
なんていちいちやるしかないんですか?
circlecolorなんてグローバル変数を使って
他の部分にも影響出してしまうのもイヤです。
0646デフォルトの名無しさん
NGNGいちいち、って for (int i = 0; i < LIMIT; i++){ ... } がベストだと思うが。
むしろ、なんでグローバル変数なんて言葉がここで出てくる?
colorってのはzukeiクラスのメンバで、それを変更したいんだろだろ?
0647デフォルトの名無しさん
NGNGzukei(){if(flag++ < 1000)color = redの値; else color = blueの値;}
イクナイ?ヤッパリ....
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGグローバル変数定義しといて、color の値が必要な時にそれを参照するっ
てことだろ。>>645 は、何のためにクラス使うか良く考えた方がいいと思
うよ。
>>647
なにしたいかサパーリわからんけど、とにかく flag++ なんて言う気持ち
悪い変数名のつけ方やめろ。
0650647
NGNG0651デフォルトの名無しさん
NGNG0652名無し
NGNGzukeiクラスのメンバーじゃなくっても、グローバル変数ならクラスの中
から参照できるでしょ。他に影響がでない、部分的なグローバル変数って
ないんですか?
0653647
NGNG0654デフォルトの名無しさん
NGNGclass sukei {
static color;
};
0655デフォルトの名無しさん
NGNGおおもりよしはる=ロリペドオタ、アニオタ、モツオタ、ベトオタ、ブルオタ、セガ信者
ひまわりと幼女のすじまんこに異様な執着心を燃やしているロリペド絵描き
2浪して九州大学歯学科に進むがプロのイラストレーターになるために大学を中退、
同人活動とUOに専念する日々を送るが、その生活は苦しいらしい(藁
自らを画家と呼び、ともすれば不真面目なものと見られかねないアニメ絵
それも、無毛のすじまんこすらも「芸術」の域にまで高めようとしている(らしい)。
現在、伝言板でチョンが暴走中!
■幼すじは至高の芸術!おおもりよしはる■
http://yasai.2ch.net/test/read.cgi/doujin/1020515485/
前スレ おおもりよしはるキタ━━(゚∀゚)━━━ !!!!
http://yasai.2ch.net/test/read.cgi/doujin/1018642526/
関連スレ
【すじ】 ようじょのすじ 【すじ】
http://www2.bbspink.com/test/read.cgi/erog/1017041827/
【抱き枕】すじ丸出し抱き枕ってどうよ?
http://mentai.2ch.net/test/read.cgi/otaku/1016198191/
■■■ロリ絵?おおもりよしはる■■■
http://www2.bbspink.com/test/read.cgi/erodoujin/1016297545/
アニメ絵が芸術?デムパロリコン男おおもりよしはる
http://yasai.2ch.net/test/read.cgi/net/1018005845/
コピペだけで会話するスレ@DTM板
http://pc.2ch.net/test/read.cgi/dtm/1012032352/
48: 柳さんトコの抱き枕カバーとかって・・・2枚買
http://comic.2ch.net/test/read.cgi/sakura/1019402459/
0656デフォルトの名無しさん
NGNG2016倍ほどそっちのほうがいい。
0658デフォルトの名無しさん
NGNGstd::vector<zukei> circle(1000, zukei(red)), square(1000, zukei(blue));
・・・これじゃだめかのぅ? >>645
0659デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNGcircle[0]は初期化しちゃいけないの?
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNGRubyigainogenngohakuso !
あああRuby!tytytytytytyty
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNGプ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
0668デフォルトの名無しさん
NGNG・・・・・・
( ΦωΦ)σ)´Д`)
0669668
NGNGkqうぇjkqうぇjkqうぇjkqうぇjkqうぇjkq
うぇjkqうぇjkqうぇjkqうぇjkqうぇjkqうぇjk
qうぇjkqわrsfうぇfgtfgtfgtfgtfgtfgt
fgたえrw4あえrw4あえrw4あえrw4あえrw4あえrw
4あえrw4あえrw4ごーq23t5;、lq34¥mgvdfz
bv
dsv
v
dsvdslkhjう゛ぃお
Ruby!
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNGママ「しっ、見ちゃいけません!キチガイになっちゃうわ」
0673645
NGNGクラス共通だからいっぺんに変えられるってことだね。
まともな返事ないから、自分で答えみつけちゃった。
2chのやつらって、たよりないなあ。こんな初心者の
質問にもまともに答えられねえなんて。
>zukeiと云うクラスがあって、
> zukei circle[1000];
> zukei square[1000];
> としたとき、マルの色、四角の色をそれぞれ、いっぺんに
> 赤、青にするのはどうしたらいいんでしょう?
> for(int i=1;i<1000;i++){circle[i].color=red;}
> なんていちいちやるしかないんですか?
> circlecolorなんてグローバル変数を使って
> 他の部分にも影響出してしまうのもイヤです。
0674デフォルトの名無しさん
NGNG>>654
0675デフォルトの名無しさん
NGNGたよりない呼ばわりしてるくせに自分の質問の意味もわからんのか?
いちいち全部変えるか、それぞれに色IDでも持たしてIDと色のテーブル用意しれ。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNGお願いします。
0678デフォルトの名無しさん
NGNGstd::freopen()
0679デフォルトの名無しさん
NGNGありがとうございます。でも、ちょっと違う嗜好なのです。
たとえば、fstreamのオブジェクトをcinやcoutと結びつけたいのです。
tieやrdbufを使ってみましたがうまくいきません。
0680デフォルトの名無しさん
NGNG0681デフォルトの名無しさん
NGNGそうなんですが、状況に応じて切り分けたいのです。
fileがopenできた時はそのまま使い、openに失敗した時はcinに結びつけて、
そのままプログラムを走らせて行きたいのです。
0682デフォルトの名無しさん
NGNGこんな感じかえ?
void foo(istream& in)
{
なんらかの処理
}
int main()
{
ifstream f("ファイル名");
if(f.fail()){
foo(cin);
}else{
foo(f);
}
return 0;
}
0683デフォルトの名無しさん
NGNGありがとうございます。fstreamはiostreamから派生しているので、単純に
istreamで受ければいいのですね。
てっきり、cinをfstreamにダウンキャストするしかないと思いこんでいまし
た。dynamic_castを行っても失敗するし、やっぱりだめでした。
これでプログラム書いてみます。
0684デフォルトの名無しさん
NGNG0685名無し
NGNGprintf("%-10s %6.2f %-04.5d,sarray,y,x);
なんてCの出力をC++ではどうするんだろcoutを使って。
0686デフォルトの名無しさん
NGNGstd::printf() を使う。
いや、もちろん I/O stream と組み合わせて書式指定する方法もあるんだけど、
何かと面倒なので俺は std::sprintf() 愛用してるよ。
0687デフォルトの名無しさん
NGNG#include <cstdio>
してprintf使います。つーか、マニュピレータ調べてください。
0688687
NGNGシュミレーション...
0689デフォルトの名無しさん
NGNG確かめてないからわからんけどこんな感じじゃないの?
cout << setw(10) << sarray << setw(0) << ' ' << setw(6) << setprecision(2) << y << setw(0) << ' ' << setw(5) << setfill('0') << x;
0690デフォルトの名無しさん
NGNGさすがオブジェクト指向型言語
sarrayとyとx用にそれぞれoperator <<を定義するのが正道だな。
その中でstd::sprintfを使おうが何だろうが別にかまわないんでないの?
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG吐き出すバイナリの効率はたぶんいいんだろうけど、記述の手間としては
泣きたくなるようなコードやねぇ。
>>685の記述をしたら>>689相当のコードを吐いてくれるような
機能ってのを、どうにかならんもんかしら。テンプレートの拡張とかで。
0693デフォルトの名無しさん
NGNG> 吐き出すバイナリの効率はたぶんいいんだろうけど
いや、ぜんぜん。
0694デフォルトの名無しさん
NGNGstdio.hとiostreamの簡単なベンチマークテストをやってみたら、泣きたくなるほど
iostreamは遅いよ。
0695デフォルトの名無しさん
NGNGVCとかのおまけiostreamは最悪かも。
そうでなくても、iostreamは遅いだろうけど。
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGそれ初めて見た.. 俺もまだまだやね。
MSDN見る限りだと性能に影響が出るようだけど、そんなもんかね?
0698696
NGNGこれしとかないとエラー終了することがあります。
しゃれにならんっス。
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNGstd::sync_with_stdio()はデフォルトでtrueじゃないのか?
0701696
NGNG実際にエラー終了したことがあるんですよ。
ちなみに Cygwin の g++ で。
0702デフォルトの名無しさん
NGNGそれって標準ライブラリに含まれてるの?
0703デフォルトの名無しさん
NGNG怖いっすねえ。まだまだ標準C++には準拠してない点があるという事か。
0704デフォルトの名無しさん
NGNGARMの時代にはなかったのではないでしょうか。
私も今ストリームバッファについての説明を「C++標準ライブラリ
チュートリアル&リファレンスを読んで解読している所です。
0705デフォルトの名無しさん
NGNGちゃんと準拠してるかどうか疑わなくてはいけない
C++ のやるせなさよ。
0706デフォルトの名無しさん
NGNGごく簡単なまともなコードなのにコンパイルが通らない。
ちなみにv 2.7.2
0707デフォルトの名無しさん
NGNGそれまでは別ので何とかしる。
0708デフォルトの名無しさん
NGNGその辺だとtemplateはVCよりもマシだったと思うし。
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGなんかそんな感じがする。
0711デフォルトの名無しさん
NGNG増えたんだろうなあ。その結果としてバグがたくさん埋もれている。
ようやく標準に準拠できた頃に、C+=2 なんて言語ができてきたりして。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG> C+=2
ワラタ
C#がそのつもりらしいけど、全然違うな。
0714デフォルトの名無しさん
NGNG細かいver.upでバグの増えるg++/libg++はこわくてつかえません。
0715アマグラマ1号 ◆r6Wx8cCc
NGNGSTLは例外返すことを前提として組まれてるから
メモリが一杯になると不正アクセスになる罠。
_set_new_handler で例外返すようにしてるけど、
みんなどうしてます?
0716デフォルトの名無しさん
NGNGコテハン?
この板では珍しいね。
0717shige
NGNG0718デフォルトの名無しさん
NGNG出てこなくていいよ。お前もKusakabeもロ○鉄も
0719アマグラマ1号 ◆r6Wx8cCc
NGNGアマですがどうぞよろしく。
0721デフォルトの名無しさん
NGNGできればCスレでも回答してホスィ
0722アマグラマ1号 ◆r6Wx8cCc
NGNGやっぱみんな使ってるんですね。
ファイルを追加するだけでいいようにはしてるんですが、
ホントにみんなこんなことやってるのか
ちょっと不安だったんで。
>>721
分かる範囲で回答スマス。
0723デフォルトの名無しさん
NGNGtemplate<DATA data>class AAA{};
ダメ??
0724723
NGNG0725デフォルトの名無しさん
NGNGVC.NET(SDK版)もbad_alloc投げないよ。
標準C++ライブラリが付属してないからだと思うけど。
0726アマグラマ1号 ◆lo1UDXY2
NGNG.NET でもまだ対応してないの!?
と思って VS.NET Academic で試したところ、大丈夫でした。
nothrow にもちゃんと対応していて、Good! です。
0727デフォルトの名無しさん
NGNG3時だし
0728デフォルトの名無しさん
NGNGいや、だから。
.NET Framework SDK版のVC++は標準Cライブラリしか付属してないんで、
標準C++ライブラリに所属する std::bad_alloc が含まれていない。
従って、newはNULLを返す仕様であると言うこと。
0729アマグラマ1号 ◆r6Wx8cCc
NGNG.NET がそもそも bad_alloc を返さないという
万が一の可能性を考えてチェックしただけです。
やっぱ流石になかったようですね。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNGねたですか?
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG> VC++は標準Cライブラリしか付属してないんで、
・・・・・嘘だろ・・・?
じゃあprintfとかstrcmpとかしか使えないのか?
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNG疑うなら試せよ。
assert.h conio.h ctype.h direct.h dos.h eh.h errno.h excpt.h fcntl.h
float.h fpieee.h gcroot.h headers io.h limits.h locale.h malloc.h math.h
mbctype.h mbstring.h memory.h minmax.h new.h process.h search.h setjmp.h
setjmpex.h share.h signal.h stdarg.h stddef.h stdexcpt.h stdio.h stdlib.h
string.h tchar.h time.h typeinfo.h useoldio.h varargs.h vcclr.h wchar.h xmath.h
sys/locking.h sys/stat.h sys/timeb.h sys/types.h sys/utime.h
付属しているヘッダ。
C++として使うためにどうしても必要なnew.hおよび、例外系のベースヘッダは
ついてるけど、それだけ。
0736デフォルトの名無しさん
NGNGsys/*.hが標準Cライブラリかよ!
0737736
NGNG0738デフォルトの名無しさん
NGNGDdeConnectでDMLERR_NO_CONV_ESTABLISHEDエラー
でクライアントとの対話に失敗してしまいます。
COMからの呼び出しですと、何かDDEへのアクセス権
が欠けるのでしょうか?
ご存じの方いらっしゃいましたらお願いします。
0739デフォルトの名無しさん
NGNGクラスって’機能’に注目して、変数や、その変数を扱う関数を単にまとめただけっていうのはありですか?
いわゆる汎用性のある、組込型の様な新たな’型’を設計するのでなければ上記のようなクラス設計ってかなり需要がありそうなんですが。
たとえばコンソールクラスは、テキストバッファやアトリビュートバッファ、それらを処理する関数を単にまとめただけ。
オブジェクトは一つで十分なのでコピーも代入演算子も書かない。そういうのってよくありますか?
0740デフォルトの名無しさん
NGNGそもそも クラス=型 としているC++が少し特殊なだけ
0741デフォルトの名無しさん
NGNGデザパタに当てはめて設計するのがいいかと。
0742デフォルトの名無しさん
NGNGそもそも 型≒バイト数と勘違いしてるやつが多いだけ
0743デフォルトの名無しさん
NGNGハァ?
0744デフォルトの名無しさん
NGNGハァ? ?
0745s
NGNGけっこう勉強したつもりなんだけど未だにクラスと型の区別がつかぬ。
どゆいみ?
0746デフォルトの名無しさん
NGNGそうですか。実践の場では良くあるって事でよろしいでしょうか?
どうもありがとうございました。
0747デフォルトの名無しさん
NGNGC#の struct と class の違いを考えてみな。
要は値型か参照型かと言うことなんだけど。
0748デフォルトの名無しさん
NGNGそれ自体がインスタンスを表すかどうか、と言うことだね。
0749デフォルトの名無しさん
NGNGつーか結局、クラスの設計をするって事は、新しい型の定義をするってことだ。
>>745
ってことで、クラスは型の一例。
0750s
NGNGホンマに?(それなら余裕で分かるんだけど・)
>748
つまりstaticメンバのみのクラス(class/struct)や、
namespaceは型ではないということ?
(namespaceはもちろん型じゃないけど)
0751デフォルトの名無しさん
NGNGインスタンス != 型 だね。
0753s
NGNG>そもそも クラス=型 としているC++が少し特殊なだけ
んじゃ、クラス=型としていない言語とは?
Smalltalkとかはクラスオブジェクトがあるけど、そういうのを言うのかな・・?
0754デフォルトの名無しさん
NGNGメンバの無いstructだって、型だよ。
intだってvoidだって型だろ。
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNG定番の注意事項なんかを述べておくと、要らなくてもコピーコンストラクタと代入演算子は書いてください。中身要らんので。書いとくだけ。ただし呼べないようにprivateで。
でないとコンパイラが勝手にpublicでコピーコンストラクタと代入演算子を生成しやがります。
0757_
NGNGvoid main(void)
{
int a;
a = 10;
}
↑を実行すると「aの値は10です」と
出力するように変更すれって言う
問題が出たんだけど分かる人います?
誰か教えて下さい m(__)m
0758デフォルトの名無しさん
NGNGprintf("aの値は%dです\n", a);
というか激しくスレ違い。
0759デフォルトの名無しさん
NGNGただし、「aの値は10です」と出力するには、OSと処理系を書いたほうがいいでしょう。
それから問題はもっと厳密に。じゃないと、
#include<stdio.h>
void main(void)
{
int a;
a = 10;
printf("aの値は10です") ;
}
という答が返ってきます。
0760デフォルトの名無しさん
NGNG#include <iostream>
void main(void)
{
int a;
a = 10;
std::cout << "aの値は" << a << "です" << std::endl;
}
0761759
NGNG0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNGint main(void)
{
puts("aの値は10です");
return 0;
}
0764デフォルトの名無しさん
NGNG全角で数字出すんだぞ。わかッてんのか?
0766デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1011722640/
でももうすぐ1000だからお早めに。
0767デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1011722640/
0768デフォルトの名無しさん
NGNGデバーグほどめんどくさい事は無い
誰かが言った言葉さ(;´ー`)
あーめんどい・・・・
0769デフォルトの名無しさん
NGNGvoid main につっこんでないな。
0770デフォルトの名無しさん
NGNG|_|Д゚)
|文|⊂)
| ̄|∧| ネタハダメヨ・・・
0771デフォルトの名無しさん
NGNG一人デスマーチ状態ぽ・・・
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNGCppUnit 使うべし。
0774デフォルトの名無しさん
NGNG知ったかハケーン
Unit Testはすでに完成(半完成)しているプロジェクトへの導入は困難です
最初から考慮して書かないとダメ
0775デフォルトの名無しさん
NGNGメンバにアクセスできる相手を、クラス側から指定できるfriendと、
アクセスしてくる側が勝手に接続してくる継承が何で同じ扱いなんだ?
0776デフォルトの名無しさん
NGNGってことはモデリングの段階でだめってことじゃん。
オブジェクト同士の結合度が密になっていなければ導入できるはずぽ。
0778デフォルトの名無しさん
NGNG私がコンパイラの実装等にあまり明るくないためか、8章で出てくる
typename の必然性がいまいち良く分かりません。その必要性を教えていた
だけないでしょうか? また typedef 以外で使う用途ってどんな場合があ
るのでしょうか?
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG自前で定義したnew演算子は呼び出せるのですが、
自前で定義したdelete演算子を呼び出す方法がわかりません。
どなたか正しい方法をご存知の方はいらっしゃらないでしょうか。
使用しているコンパイラはVC6です。
void *operator new( size_t size, my_allocator& alloc )
{
return alloc.allocate( size );
}
void operator delete( void* pointer, my_allocator& alloc )
{
alloc.deallocate( pointer );
}
class X;
void f( my_allocator& alloc )
{
X* array = new( alloc ) X(); // 自前で定義したnew演算子を呼び出す。
// delete( alloc ) X; // エラーが出る。この方法は間違いらしい。
// delete X; // 標準のdelete演算子が呼び出されてしまうのでダメ。
}
0781デフォルトの名無しさん
NGNGclassに対して定義しないとドツボだった記憶が。
0782デフォルトの名無しさん
NGNGdeallocateはsizeを指定しないとエラーになりませんか?
それから、my_allocateはallocator<X>から継承したものですか?
0783デフォルトの名無しさん
NGNG今のところ、その部分ではエラーは発生していませんが、
deallocate()は第二引数としてサイズを指定しなけりゃいかんみたいですね。
直しておきます。ご指摘ありがとうございました。
size_type とか pointer とかの定義が面倒なので、
今のところ my_allocator を std::allocator を継承していますが、
そのうち独立させたいなあ、などと夢想しています。
0784デフォルトの名無しさん
NGNG了解です。多分、delete array;で、自前のdeleteが呼び出されていると
思います。グローバルのdeleteを呼び出すときは ::delete array;となる
でしょうね。全体がわからないのでこちらでコンパイルできないのです
が、もし骨格部分でもうpしてくだされば、こちらで確認してみます。
0785デフォルトの名無しさん
NGNGデバッガで追ってみたところ、 delete X とすると、自前のものではなくて
システム標準の operator delete() が呼び出されているようでした。
また、::delete X としても動作は変わりませんでした。
いくつかのC++の解説書を調べてみたところ(赤本第三版とかEffective C++とか)、
独自定義の operator new() の使用例は書いてありましたが、
operator delete() を独自に定義した場合は、システム標準と同じ引数で
例示されているものしか見あたりませんでした。
msdnオンラインのページには似たような例が載っていましたが、
operator delete()は再定義はしてあるものの、使用例が書いてないので涙。
http://www.microsoft.com/JAPAN/developer/library/vccore/vcrefcompilerwarning%28level1%29c4291.htm
骨格を切り離すのはちょっと難航中。
0786デフォルトの名無しさん
NGNG784です。すみません、ちょっとガセを書いてしまったと思います。
newは柔軟性がありますが、deleteは引数を一つしか取れないので
ちょっと面倒ですね。コンテナのdeleteはどのようにして実現している
のかを知らないと書けませんでした。すみません、力不足でした。
0787デフォルトの名無しさん
NGNGclass foo : public myallocatio<foo>
{...};
みたいな、ModernC++な方法で……
0788デフォルトの名無しさん
NGNGp141 のことかな? 確かにここの説明では必要性がよく分からないかも
しれんなあ。次のようなテンプレートを考えてみてくれ。
template<class T> class Foo {
public:
typename T::size_type foo( const T& x );
};
メンバ関数 foo() は、T::size_type という型の戻値を返すんだが、
コンパイラが最初にこのコードを読んだときは、まだ T に実際の型が
与えられていない。それでもコンパイラは、上のコードを構文解析だけは
しなくちゃならない。というわけで、プログラマがコンパイラに対して
「T::size_type は何らかの型である」ということを教えてやる必要が
あるわけだ。
Accelerated では、typename vector<T>::size_type となっているが、
これだと、コンパイラは既に #include <vector> を通っているはずで、
vector<T>::size_type が何かの型だということをコンパイラは知って
いてもよいはずなんだよね。だから必要性がよく分からないんだと思う。
実際、VC++ なんかだと、typename が無くてもコンパイルが通ったり
するし。
0790デフォルトの名無しさん
NGNGオーバーロードされた operator delete を使って delete pObj はできない。
オーバーロードされたものは、対応する operator new で確保した
オブジェクトのコンストラクタが例外をスローした時に呼び出されるようにコンパイラが使用する。
0791デフォルトの名無しさん
NGNGそもそも operator delete をオーバーロードしたところで、new 演算子
と違い、delete 演算子には引数を付加することができないので、それを
呼ぶことは不可能。
つまり、void operator delete( void* pointer, my_allocator& alloc )
とかを定義しても、delete p; で、この operator delete が呼ばれる
ことはありえないということ。
781 も書いているように、やるなら、大域的な new/delete ではなく、
クラス内で new/delete を上書きするべし。
class X {
private:
my_allocator *pAlloc;
public:
void *operator new( size_t size, my_allocator& alloc )
{
pAlloc = &alloc;
return alloc.allocate( size );
}
void operator delete( void* pointer, size_t size )
{
pAlloc->deallocate( pointer );
}
}; // class X
void f( my_allocator& alloc )
{
X* array = new( alloc ) X(); // 自前で定義したoperator newを呼び出す。
delete X; // 自前で定義したoperator deleteを呼び出す。
}
こんなんでどう?
0792791
NGNGoperator new の時点じゃ、まだオブジェクトが構築されてないじゃんか。
書き直し。
class X {
private:
static my_allocator *pAlloc;
public:
void *operator new( size_t size, my_allocator& alloc )
{
if (pAlloc != NULL) pAlloc = &alloc;
return alloc.allocate( size );
}
……
}; // class X
my_allocator *X::pAlloc = NULL;
これでもいまいちだけど、やりたいことは分かるよね。
0793791
NGNGvoid operator delete( void* pointer, size_t size );
というシグニチャを持った operator delete は存在しないようだ。
void operator delete( void* pointer );
を使ってね。
あと、>>790 の言ってるのは、
void operator delete( void* pointer, void * );
のことだね。
0794デフォルトの名無しさん
NGNG書籍でも可.探したんだけど全然ない・・・
0795デフォルトの名無しさん
NGNGhttp://shopping.yahoo.co.jp/shop?d=jb&id=30693818
0796デフォルトの名無しさん
NGNGttp://www-scc.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/index.html
0797_
NGNGいきなりこんな事会社で言われてしまいましたが、これからC言語を学んで
いくとして、どのくらいでお金がもらえるレベルになりますか・・・?
一応Win、エクセル&アクセスでのVBAとVBEの基礎くらいならわかります。
あと、アクセスでSQLも少しならわかるくらいです。
0798デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNGclass X;
class my_allocator : public allocator<X> {
};
class X {
private:
static my_allocator *pAlloc;
public:
void *operator new(size_t size, my_allocator &alloc) {
if (pAlloc != NULL) pAlloc = &alloc;
return alloc.allocate( size );
}
void operator delete(void *pointer, size_t size) {
pAlloc->deallocate(static_cast<X *>(pointer), size);
}
};
my_allocator *X::pAlloc = 0;
void f(my_allocator &alloc)
{
X *array1 = new(alloc) X();
delete array1;
}
}
0801デフォルトの名無しさん
NGNGvoid operator delete(void *pointer, size_t size);という形式はないのですが、
なぜかコンパイルできてしまいます。
コンパイラはBorland-C++5.6です。今からgcc3.0で試してみます。
0802デフォルトの名無しさん
NGNG0803デフォルトの名無しさん
NGNGあー、なんとなくわかりました。
定義されているどの operator new() で確保しても、
例外発生した場合以外は、必ず operator delete( void* ) が呼び出される。
余計な引数を付け加えた operator delete() は、
あくまで例外発生時に呼び出すのが主目的であって、
ユーザーが任意に呼び出すことは出来ない、と。
わりと納得。
0804デフォルトの名無しさん
NGNGダミーで無視されていますね。Borland-C++は::delete()、gcc3.0ではfree
を呼び出していました。
0805デフォルトの名無しさん
NGNGEffective C++ の 10項で、void operator delete(void *p, size_t size);
の形が使われてるね。そこの説明読むと、この形の operator delete も
必要だと思えるなぁ。
0806デフォルトの名無しさん
NGNGどうしてもsize_tを持ったdeleteが必要な時がありますね。もっともこれは
オーバーロードだから、実際の解放には::operator deleteかdeallocateを
使うしかないわけですが。
0807デフォルトの名無しさん
NGNGvoid operator delete(void *p, std::size_t size); はC++標準ではOKなはずだぞ。
今規格が手元に無いので自分では確かめてないのだが、
Exceptional C++によれば「3.7.3.3/2を参照されたい」とのこと。
0808デフォルトの名無しさん
NGNG昔から#include <iostream.h>みたいに書いていたから
今もstd使わないでこういう書き方しているんですけども、
この書き方って何か問題あるんですか?
ANSI規格で、stdを使うように推奨していることは知っていますが、
using namespace std;とか
std::cout << とか書くのが面倒くさいんですけど。
0809デフォルトの名無しさん
NGNG別に。using namespace std;書いた時点で、iostreamもiostream.hと同じ意味に
なっちゃうよ。例えば自前のcinを作りたかったら、それを my というnamespace
ででも包めばバッティングしない。
0810790
NGNGhttp://www.google.co.jp/search?hl=ja&q=+site%3Awww.microsoft.com+%22Robert+Schmidt%22+new+delete&lr=lang_ja
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGなんだ・・・
0814デフォルトの名無しさん
NGNGなんだとはなんだ
0815デフォルトの名無しさん
NGNGなんだとはなんだとはなんだ
0816デフォルトの名無しさん
NGNGなんだとはなんだとはなんだとはなんだ
0817デフォルトの名無しさん
NGNGcout << "なんだとは";
}
cout << "なんだ" << endl;
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGワロタ
0820デフォルトの名無しさん
NGNGおかげでかなり理解が深まったよ。ちょっとまとめてみる。長文すまん。
● placement-new に相当するような placement-delete 構文はない。
delete p; によって呼び出されるのは、次のどちらか一方。
void operator delete( void * );
void operator delete( void *, size_t );
前者が存在すれば、前者が呼び出される。
後者の size_t にどのような値が渡されるかは分からなかったが、
g++ で実験してみたところ、delete 演算子のオペランドとなったポインタを
dereference した型の sizeof になるようだ。
●placement-new 構文によるコンストラクト中に例外が発生した場合、
使用された operator new に対応するシグニチャを持つ operator delete が
暗黙裡に呼び出される。
例:
void *operator new( size_t, T1, T2, T3 ); に対しては、
void operator delete( void *, T1, T2, T3 ); が呼び出される。
このような operator delete を宣言しないとコンパイラが警告を出すことも
ある。
●placement な operator delete を明示的に呼び出してオブジェクトを
デストラクトしたい場合は、デストラクタを明示的に呼び出す必要がある。
例:
class X {};
class Foo {
public:
~Foo();
void *operator new( size_t, X& );
void operator delete( void *, X& );
};
X x;
Foo *p = new(x) Foo;
p->~Foo(); // デストラクタの明示的な呼び出し
Foo::operator delete( p, x ); // placement delete の明示的な呼び出し
0821デフォルトの名無しさん
NGNGコンパイラに怒られるんだけど・・。
error C2259: 'CTest' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。
class CTest
{
TestM()
{
CTest* pTest = new CTest;
};
};
0822デフォルトの名無しさん
NGNGコンパイラが怒るんなら、無理なんでしょう。書き方を変えてみる。
class CTest
{
TestM();
};
CTest::TestM()
{
CTest* pTest = new CTest;
}
0823821
NGNGMicrosoftC++しか使ったことないのでさぱ〜りです。
違いを教えてください。
0825デフォルトの名無しさん
NGNGMS C/C++ってまだ出てるの?
0826デフォルトの名無しさん
NGNGMicrosoft C++ Compiler 13.0
http://www.microsoft.com/japan/msdn/visualc/
0827デフォルトの名無しさん
NGNGその名前・・・正確なんですか?マジで。
0828デフォルトの名無しさん
NGNGコマンドラインから cl とやると
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version XX.XX.XXXX for 80x86
Copyright(C) Microsoft Corp XXXX-XXXX. All rights reserved.
と表示されるよ。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG勉強になりました。
0831デフォルトの名無しさん
NGNG> practice because there is no way for the compiler to verify that the
> destructor is indeed trivial.
って書いてあるんですが、具体的にこれはどういうコードが unsafe なんでしょう?
そもそも "incomplete type" 「不完全な型」ってどういう意味なのかが分からない
んですが、どなたか教えて頂けませんでしょうか。
# やっぱり僕には boost はまだ早いですかねぇ・・・
0832デフォルトの名無しさん
NGNGincomplete type っつーのは、たとえば
struct foo;
foo* p;
みたいに、実際の定義を与えていない宣言だけの型かと。
0833831
NGNGなるほど!たしかにそーゆー型に sizeof を適用したら
"incomplete type" ってエラーメッセージが出ました。(g++ 3.0.4)
それなら話は分かります。ありがとうございました m(_ _)m
0834デフォルトの名無しさん
NGNGVC6ですが、なぜこれでコンパイルエラーが出やがりますか?
0835デフォルトの名無しさん
NGNGと
int const
って何か違うの?
C++ って const の意味が増えたと聞いたんだけど・・・
0836デフォルトの名無しさん
NGNGb)int const i
c)const int *p
d)int const *p
e)int* const p
a=b
c=d!=e
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNG2) int *const p
3) const int const *p
4) const int const *const p
訳分からんわ・・・・
0839デフォルトの名無しさん
NGNG0840835
NGNGthx!
a==b
c==d
である事が分かればそれでいいんだ。
テストコード書いて見た限りじゃ一緒っぽかったんだけど、
一応不安だったんで聞いてみたっす。
# さすがにc != e は分かっとるよ。
0841デフォルトの名無しさん
NGNG3と4の先頭のconstは不要
0842デフォルトの名無しさん
NGNG産休。何となくわかってきました。今実験中です。
0843831
NGNGお世話になったお礼というわけでもないんですけど、boost に関する指摘な
メモでも書いてみました。
http://www4.tkcity.net/~toshiki/boost/index.html
まだ勉強始めたばっかりなんで、内容薄いんですけど、今後も暇があれば勉強
した事を加筆していくつもりです。ですが、なにぶん若輩者故間違ったところ
等あると思うんで、そーゆーのは指摘して頂けるとありがたいです・・・
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNGなんていうか、目次頁がEUCで中身がSJISとかいう、文字コードごちゃまぜはやめてくれる・・・? IEが混乱するのよ・・・それか各頁で文字コードを指定しておくとか
0846845
NGNG0847デフォルトの名無しさん
NGNGブラウザによる自動判別にも限界があるし。
0848847
NGNGさせてもらいます。
0849831
NGNGスマソ,スマソ。
ところで ref の使い方が分かんないんですがどなたか教えて頂けませんでしょうか。
僕の理解によると、
struct Aho : binary_function<int&, int, void>
{
void operator() (int& a, int b) const {cerr << a << " " << b <<endl;;}
};
struct Baka : binary_function<int, int, void>
{
void operator() (int a, int b) const {cerr << a << " " << b <<endl;;}
};
int main()
{
int i=30;
typedef boost::binder1st<Aho> funca;
typedef boost::binder1st<Baka> funcb;
Aho a;
Baka b;
funca fa = boost::bind1st(a, i);
funcb fb = boost::bind1st(b, boost::ref(i));
fa(0);
fb(0);
i = 20;
fa(0);
fb(0);
}
これで
30 0
30 0
20 0
20 0
と表示されるんじゃないかと思ったんですが、
30 0
30 0
20 0
30 0
ってなるんですよね。(g++ 3.0.4)
参照渡しのパラメータを持つ関数オブジェクト(Aho)でも ref 無しでも fb が
作れちゃうみたいですし、ref の効用がイマイチ分かりません。
どなたか教えて頂けませんでしょうか。
あ、Aho とか Baka っつーのは hoge とか foo みたいなもんなんで、あまりお気に
なさらずに・・・
0850デフォルトの名無しさん
NGNGnext(),prior()のところ、template <class T>じゃないの?
0851841
NGNGオリジナルが間違ってるんですよねぇ。でも英語書けないから報告は出来ないや。
ちなみに作りかけの ref を間違ってウプしとりました。見なかった事にして下さい。
0853デフォルトの名無しさん
NGNGstatic N;
};
void main(void)
{
int a[10]={STA<12>::N};
}
test.obj : error LNK2001: 外部シンボル ""public: static int STA<12>::N" (?N@?$STA@$0M@@@2HA)" は未解決です
・・・・・・・・・・・・・分からない、ナンデ??
0854デフォルトの名無しさん
NGNGstruct STA {
static int N;
};
template<int I>
static int STA::N = I;
0855デフォルトの名無しさん
NGNGサンクス♪
0856デフォルトの名無しさん
NGNGと思ったら終わってた・・・打つ
0857831
NGNGもしかしてウチの事でしょうか・・・なんか今tkcityの名前が引けないっぽい
んですよね。DNSが死んだっぽくって。まぁその内アクセス出来るようになると
思うんで・・・
# スレ汚しスマソ
0858デフォルトの名無しさん
NGNGつけかえたいんですが、そんなことは可能でしょうか?
0859デフォルトの名無しさん
NGNGdefine、参照、置換、プロパティのどれかでできるとおもう
0860デフォルトの名無しさん
NGNG0861858
NGNGありがとうございます。
参照で出来ました!
0862デフォルトの名無しさん
NGNGclass _OMNITHREAD_NTDLL_ omni_mutex_lock {
omni_mutex& mutex;
public:
omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); }
~omni_mutex_lock(void) { mutex.unlock(); }
private:
// dummy copy constructor and operator= to prevent copying
omni_mutex_lock(const omni_mutex_lock&);
omni_mutex_lock& operator=(const omni_mutex_lock&);
};
上記クラスのコンストラクタで引数omni_mutex&mを受け取りomni_mutexのコンストラクタに渡しています
ここでomni_mutexのコンストラクタに引数omni_mutex&を受け取る物はありません。
const omni_mutex&を受け取る物ならありますがこれはコピーコンストラクタのダミー定義だけです
omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); }のmutex(m)はエラーにならないのですか?
0863デフォルトの名無しさん
NGNG2行目をよく見てみそ
0864862
NGNG0865デフォルトの名無しさん
NGNGこれ以降はFAQだ
0866862
NGNGこの場合mutex(m)はどう働くのですか?
教えて君で申し訳ないのですがよろしくどうぞ。
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNGint&j = i; // これは何でしょうね?
0869862
NGNGomni_mutex *mutex;
mutex = &m;
みたいな事ですよね。
でも : mutex(m)ってのはコンストラクタを呼ぶ物じゃないんですか?
0870デフォルトの名無しさん
NGNG呼ばない
0871862
NGNGoperator=が禁止されているのでこんな風にやるとか?
0873デフォルトの名無しさん
NGNGint&j( i ); // これは何でしょうね?
0874デフォルトの名無しさん
NGNGあ、そっか。
初期化の=はコンストラクタ呼ぶんだ。
0875862
NGNG参照の場合も要はポインタだから組込型と同じようにコンパイラは初期化の方法を知ってて
クラスの場合はコピーコンストラクタとかを呼ぶんですね?
0876831
NGNGhttp://members13.tsukaeru.net/toshi/
間違っとる所とか、指摘して頂けると幸いです。
# boost 関係のページは実はダミーなんですけどね(藁
0877デフォルトの名無しさん
NGNGだから呼ばんちゅうに。あんたもガンコな人だね。
0878デフォルトの名無しさん
NGNG参照=ポインタならC++には参照はいらないな。
0879デフォルトの名無しさん
NGNGomni_mutex& mx0( m );
omni_mutex mx1( m );
これら二つがまったく異なることは気がつきましたか?
ちなみに配置されているアドレスを比較すると、以下のようになるはず。
&mx0 != &mx1;
&mx0 == &m;
0880デフォルトの名無しさん
NGNGなんで 877 を指しているのかは謎だけど、機能的には、
T& foo == T* const foo
じゃないの?
0881デフォルトの名無しさん
NGNGバインドについて勉強してこい
0882デフォルトの名無しさん
NGNGああ、シンタックス上有用、というのはそのとおり。
「機能的」と書いたのが間違い。「機構的に」と書くべきだった。
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNGHOGE h2=10; //これはなんでしょうね?
0886デフォルトの名無しさん
NGNG確かカーボンコピー。
0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNGC++のことならぜんてわかるから
質問があるならこの俺に
0889デフォルトの名無しさん
NGNG8Qeensをコンパイル時に解く方法はありますか?
0890888
NGNGごめんなさい出直します
0891889
NGNGQeens -> Queens
0892888
NGNGC++の"基本的なこと"なら何でも俺に聞け!
0893デフォルトの名無しさん
NGNG・クライアントからはBaseしか見えない
・これらのインスタンスをソートする際の比較を、 AB、AC、BC等、
相手クラスとの組み合わせによって、別々の方法で比較しなければならない
これに今後D,E,Fと追加される予定がある場合にも、
柔軟に対応できるよい設計方法ってないでしょうか?
できればダウンキャストを使いたくないのですが、やはり使うべきでしょうか?
0894デフォルトの名無しさん
NGNGそれぞれが 中間的な比較対象を生成して、それを比較するとか。
例えば、現在の内部状態を一旦数値化して、それを比べるっていうのだと
Baseに state_to_val() = 0; というのを用意しておいて、具体的な実装はA,B,C側でやる。
class A{
//...
bool operator< (const Base& b){
Val val1 = this->state_to_val();
Val val2 = b.state_to_val();
return val1 < val2;
}
//...
}
Base* pb1 = new A;
Base* pb2 = new C;
if( pb1 < pb2 ) //...
…頭が回ってないので変なこと書いてたらスマソ
0895デフォルトの名無しさん
NGNGレス感謝です。これならメチャスマートですねぇ。
具体的にはA,B,Cは独自プリミティブ、ソートはZソートなんです。
894さんの言う中間的な比較対象を、Z値のmin、maxとして
引っかかった場合のみ、もにょもにょするのが良いのかな…。
できればこの、もにょもにょの部分(円と方形のコリジョン判定など)も、
中間的な比較対象として一般化したいのですが、難しいですよねぇ…。
もう少し悩んでみます。アドバイスありがとうございました。
あ…、気づいたらサッカー終わってる(´Д⊂
0896デフォルトの名無しさん
NGNGbool operator< ( const Base& lhs, const Base& rhs ) {
return lhs.isLessThanBase( rhs );
}
class Base {
virtual bool isLessThanBase( const Base& rhs ) const = 0;
};
class D1 : public Base {
virtual bool isLessThanBase( const Base& rhs ) const { return rhs.isMoreThan(*this); }
template<class T>
bool isMoreThan( const T& rhs ) const { return Compare(*this, rhs)>0; }
};
class D2 : public Base {
virtual bool isLessThanBase( const Base& rhs ) const { return rhs.isMoreThan(*this); }
template<class T>
bool isMoreThan( const T& rhs ) const { return Compare(*this, rhs)>0; }
};
でごっそりとCompareを用意とか。
「ダブルディスパッチ」で検索かけてみると良いと思われ。
0897896
NGNG0898デフォルトの名無しさん
NGNG共通的な比較対象に変換するというアプローチならば
すべてポリゴン(三角形リスト)に変換するというのもアリかな。
実行速度の点でダメだろうけど。
ダブルディスパッチをするのならVisitorパターンをオススメする。
ダウンキャストしない方法は多分それしかない。
Modern C++ に依存関係を最小にするVisitorパターンのやり方とか
のってるよ。
0899デフォルトの名無しさん
NGNG0900893
NGNG不可避なトレードオフだとと思ってたのに、こんなエレガントな解決法があるなんて…。
今回は、比較対照である要素が2つという特殊なケースだったので、
ConcreteVisitorA〜Cを用意し、それぞれをA〜Cに関連づけ、Visitorを
B.conpare(A->VisitorA)の様に渡す事によって、実行時型チェックを避けることができました。
できれば中身は同じなのに、別のものとしているABとBAの扱いを、
同じものにできれば、ConcreteVisitorも一つにまとまり、
素晴らしそうなのですが…これは今後の課題にしたいと思います。
>>896
うちのショボーンコンパイラだと、クラス内の関数テンプレートが
うまく自動生成してくれなくて…でも今後の参考にさせて頂きます。
>>898
三角形リストでやっておいてから、もとのプリミティブに還元……と。
これも分かり易いですねぇ…。Modern C++の紹介も感謝、入手しておきます。
お二人ともレス、ありがとうございました!
0901デフォルトの名無しさん
NGNGVisitorがひとつになることはないよ。
行列の行と列のようになるはず。
で、順番入れ替えは・・上の話でもう自明かと。
それからModernは(もし読んでなければ)
デザパタ本読んでからのほうが良いと思われる。
0902893
NGNGAcceptorA( VisitorB )と
AcceptorB( VisitorA )という、同じ処理なのに別の記述なとこを
どうにかできたらと思ったのですが、仰るとおりでこれやったらダブル
ディスパッチでもなんでも無くなるんですね。考えてみたらもう一枚クラスを
かませれば良いだけですし…。いやはや、素人の浅知恵でした…。
ご推察の通り、私はGoF本の分かり易いところ拾い読みした程度でして…。
今回のことで感銘を受けたので、もう一度基礎から読み直してみたいと
思います。ご忠告ありがとうございました。
0903デフォルトの名無しさん
NGNGエラーになっちゃいます。なぜでしょうか?
------------------
/* Tera Term
Copyright(C) 1994-1998 T. Teranishi
All rights reserved. */
/* TTMACRO.EXE, error dialog box */
// CErrDlg dialog
class CErrDlg : public CDialog
{
public:
CErrDlg(PCHAR Msg, PCHAR Line, int x, int y);
//{{AFX_DATA(CErrDlg)
enum { IDD = IDD_ERRDLG };
//}}AFX_DATA
//{{AFX_VIRTUAL(CErrDlg)
//}}AFX_VIRTUAL
protected:
PCHAR MsgStr, LineStr;
int PosX, PosY;
//{{AFX_MSG(CErrDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
typedef CErrDlg *PErrDlg;
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGもっと気の利いたこといえヴォケ
0906デフォルトの名無しさん
NGNGああ、これってMFCだったのですね。
実はC++ではろくに書いたことがなくて、さらにWindowsでプログラムを
書いたこともロクにないもんで気づきませんでした。
確かにBCCにはMFCはついてきませんね。さて、どうしたもんかなあ。
0907デフォルトの名無しさん
NGNG仕事でやってるんですか?趣味でやってるんですか?
0908デフォルトの名無しさん
NGNGつか、あんた……他人のコード、名前入りで晒すなよ……
0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG趣味なのです。
TeraTermにSSH2をつけようとしてて、それだけだったら
MFCと関係なくやれるのですが(だいたいできた)、
どうせならTeraTermもろとも、無料環境でコンパイルできるように
したいなと思ったのです。
0911デフォルトの名無しさん
NGNG以上Windowsプログラミングの知識0のド素人の激しくスレ違いな妄言でした。
0912デフォルトの名無しさん
NGNG仕事でなくてよかったですねぇ。そのレベルで仕事だったら大変です。
以前ヴァカ上司がVC++の仕事をC++やろ?とかいって取ってきたときは地獄を見ました。
0913デフォルトの名無しさん
NGNGftp://ftp.digitalmars.com/Digital_Mars_C++/MS/4.21/MFC4.21.zip
MFCとATL落ちてるんで拾ってきて使えるようにしよう
0914デフォルトの名無しさん
NGNG大変失礼しました。
>>912
私ごときのレベルではとてもプログラミングを業とすることはできませんね。
もっと勉強が必要なのですが、Windows関係はなんでもお金が高くついて
いけません。
0915デフォルトの名無しさん
NGNGconst int c;
public:
A() : c(0) { }
};
class B : A { };
B b1, b2;
b1 = b2;
このコードが通りません
constメンバを持つクラスにはoperator=がデフォルトで設定されないのでしょうか?
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNGoperator = はコンストラクタじゃない。
コンストラクタじゃないから const メンバは変更できない。
だから暗黙の生成はされないってことでしょ。
0918デフォルトの名無しさん
NGNGDigital Mars C++用のものを無理矢理Mingwにつっこんでみましたが、
必殺Internal Compiler Errorになってしまいました。手も足も出ん。
0919デフォルトの名無しさん
NGNG修正しろって。
MFCはたいしたことやってないから、時間を掛ければ凡人にも直せる
0920デフォルトの名無しさん
NGNG他のエラーならどうにかこうにかAdHocに直せるだろうが、
Internal Compiler Errorじゃどうしていいのかわからん。
0921デフォルトの名無しさん
NGNGむしろ君の出力ではどうしていいのかわからん。
0922デフォルトの名無しさん
NGNGclass A { };
BYTE b[sizeof A * 2];
A* pa = new(b) A[2];
これだとオーバーランしちゃうと思うんですが
0923デフォルトの名無しさん
NGNGalignment の問題をいってる?
0924デフォルトの名無しさん
NGNGクラスのメンバ関数を別ファイルで定義してインクルードするのはありなんですか?
0925デフォルトの名無しさん
NGNGinclude = そのまま挿入
だから動くだろうけど読みやすいかと言えば死ぬほど読みにくい。
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG.netでC++プロジェクトでコーデングしているとこのような警告ダイアログが出て止まってしまいます。
これはどういうことでしょう。スタックオーバーフローというやつでしょうか。
0928デフォルトの名無しさん
NGNG変数a 周辺のスタックの内容が破壊されました。
よくあるエラーだねぇ・・。
0929922
NGNGalignmentじゃないです。
たとえばdouble[2]とかでもかまいません
http://www.google.co.jp/search?q=cache:u_dSdwqiAL8C:www.eva.hi-ho.ne.jp/reki/diary/2001/20010206.htm+placement+new&hl=ja&lr=lang_ja
ここを見ると配列で取ると管理領域分余分にメモリを消費するようで、
これが規定されてるのか不満なんです
0930デフォルトの名無しさん
NGNGvoid main (void)
{
int a,b,c;
scanf("%s %s %s",&a,&b,&c);
printf("%5s\n",a);
printf("%11s\n",b);
printf("%16s\n",c);
}
コンパイルエラーはないんですが
実行するとエラーが出るのですが原因わかりますか?
メモリがどうたらこうたら初心者でスマソ
0931デフォルトの名無しさん
NGNGmainの戻り値はint
0932デフォルトの名無しさん
NGNG貴方は2つの罪を犯しています。
1つ目の罪はその質問はC質問スレですべきということで、
2つ目は罪はprintfのドキュメントをちゃんと読んでないこと、
です。%sが文字列であることを確認してからやり直しましょう。
09330927
NGNGなるほど。見直してみると配列a[10][10]の添え字の範囲を超えてアクセスしていました。
0934デフォルトの名無しさん
NGNGうーん、意味がわからない。無知でスマソ
>>932
ドキュメント?
すれ違いでしたか
逝ってきます
0935デフォルトの名無しさん
NGNGoperator new() と operator new[]() は別物だよ。そのリンク先の人は、
カン違いしてるか、古い仕様の C++ コンパイラを使ってると思われる。
0936デフォルトの名無しさん
NGNG示された URL に...
> だが、管理領域のサイズはどこにも定義が無いことから、これらは
> 不定のサイズと考えるべきだ。他のコンパイラでは(場合によっては
> コンパイルオプション次第で)違うサイズの管理領域を確保している
> 可能性は十分ある。
と書かれているが...。これじゃ不満なの ?
こんなことがしたいのなら、::operator new() と ::operator delete()
を適切に定義すべき。
0938936
NGNGだから ::operator new[]() と ::operator delete[]() を定義しろと、
書いてあるんだけど、見えないのか ?
(そう言えば、仕様変わったんだよな、忘れてたよ。サンクス。>>935)
0939935
NGNGvoid *operator new[]() を定義した場合は、てっきり、これが返す
アドレスから配列はが始まると思っていたのだが、やっぱり、先頭部は
管理領域になるようだ。
0940デフォルトの名無しさん
NGNG0941935
NGNGその管理領域も含めたサイズが渡ってくるので、メモリを確保するのは
そこでやればよいのかな。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNGLISPみたいな?
0944831
NGNGこんな感じに書けるんよ。結構感動。
vector<int> v(10);
for_each(v.begin(),v.end(), _1 = 50);
for_each(v.begin(),v.end(), cerr << _1 << " ");
0945デフォルトの名無しさん
NGNG1行foreach、へぇ。
0946831
NGNGint i = 3, j = 5,k;
k = (_1 + _2)(i, j); // k = 8
0947デフォルトの名無しさん
NGNGfor_each(v.begin(),v.end(), cerr << "error: " << _1 << " ");
となると素直には書けないので constant() とか使わないと
いけないのが、ちょびっとだけ悲しいんだけどね。
0948デフォルトの名無しさん
NGNG0949デフォルトの名無しさん
NGNG{
public:
int m_i;
CTest& operator+=(const CTest& t)
{
(*this).m_i += t.m_i;
return (*this);//これは必要なのか。
}
};
operator+= にreturn(*this)は必要なんでしょうか?
なくても動くような気がするのですが、どのような場合、
return (*this); が必要なのでしょうか。
0950デフォルトの名無しさん
NGNG戻り値があることについては、
a = (b += c);
というふうに、足した結果をさらに参照できるよううに。
戻り型が値でなく非constの参照なのは、代入結果の左辺値にさらに変更を加えることを許すためじゃないすか。
(a += b) += c;
とか。
0951949
NGNGなるほど、
>a = (b += c);
のような使い方、したことなかったので、気がつきませんでした。
納得しました。ありがとうございました。
0952デフォルトの名無しさん
NGNG>> (a += b) += c;
でもそれって int とか基本型では保証されてないって聞いた覚えがあるぞ。気のせいか?
0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNGなんつって
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNGvoid Test1() throw()
{
throw 1;//Error!
}
//例外をthrowできる関数
void Test2 throw(...)
{
throw "Test2";//Ok
}
//例外をthrowできる
void Test3() throw(int)
{
throw 1;//Ok
}
throwについて調べてるんですが、
末尾につけるthrow(...),throw()は、
プログラムのミスを避けるためのものだと思うのですが、
使わないと最適化への影響や何らかの弊害があるのでしょうか?
よろしくお願いします。
0957思い出
NGNGC obj_c(); //これでデフォルトコンストラクタ呼んでたと思ってた
0958デフォルトの名無しさん
NGNG帰ってくる例外の型を特定するための機能だよね。
0959デフォルトの名無しさん
NGNGvoid Test4() throw(unsigned int)
{
throw 4;
}
void TestCatch1();
{
try{
Test2();
Test3();
Test4();
}
catch(int){//型がわかる
//Test2
}
catch(unsigned int){//型がわかる
//Test4
}
}
TestCatch2() throw()
{
try{
TestCatch1();
}
catch(...){//残り
//Test3
}
}
あいまいさを解決できるということですね。納得できました。
0960デフォルトの名無しさん
NGNG呼び出し側が捕捉すべき例外を明示するための機能。
throw(unsigned int)と指定されていれば、
throw floatは成立し得ない(プログラムが落とされる
0961デフォルトの名無しさん
NGNG気のせいだろ。というか、その程度、ちょっとコンパイラで
確認すればいい話じゃないのか?
> (a += b) += c;
このコードは、VC6SP5 , bcc5.5.1 , gcc2.95.3-6 で
コンパイルが通って、なおかつ期待通りに計算されてたぞ。
ただ、ついでに確認したhttp://www.digitalmars.com/の
コンパイラだと、コンパイルが通ってくれなかったな。
このコンパイラがヘヴォなだけだと思うんだが…。
本格的に確認したければ、プロ言C++を見るしか。
>>953>>954
operator=()の戻り値をconstにはするな、とEffective C++に
書いてある。理由は、Scott Meyersお得意の『intのように振舞え』
だったけど。
Exceptional C++にもconstにはするな、と書いてある。こっちの理由は、
STLのコンテナに入れられなくなるから、だ。
そういうわけで、constを付けちゃいけない。
0962デフォルトの名無しさん
NGNGthrowする側が仕様以外の例外を返さないようにする保険のようなもんじゃないの?
0963デフォルトの名無しさん
NGNGする側じゃなくて、される側のために用意してあるもんなんだが
0964デフォルトの名無しさん
NGNGまぁ、お互いのためだ。
出す側が未定義の例外投げればコンパイルエラーになるし、出される側も飛んでくる型が特定できる。
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNGその例外の値(intとか)クラスメンバ(Exception.typeみたいな)で判断するべし。
0967デフォルトの名無しさん
NGNGコンパイルエラーにはならないっしょ。例外仕様が指定されていないライブラリのために。
>>965
言ってる意味がわからん。例外は、投げるときは必ずひとつのはずだが。
0969デフォルトの名無しさん
NGNGスタックに確保したオブジェクトのデストラクタがthrowするとか。
0970デフォルトの名無しさん
NGNG例外のためのアンワインド中に、スタック上のオブジェクトのデストラクタが
さらに例外を投げた場合って意味か?
その場合はいきなりプログラムがあぼーんじゃなかったっけ。
だからデストラクタでは例外を投げるなよ、といろんな本に書いてあるのでは。
0971デフォルトの名無しさん
NGNGえっ?違うの・・・?
# ネタじゃありません・・・
0972デフォルトの名無しさん
NGNGもう痔スレ立てますよ?
0973デフォルトの名無しさん
NGNGよろしこ。
0974デフォルトの名無しさん
NGNGおっと、いつのまに1000間近か…よろしく
0975デフォルトの名無しさん
NGNG関数宣言になっちゃう
0977デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1021787032/l50
新スレ
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1021787032/l50
新スレ
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996v(^・^)v
NGNG0997デフォルトの名無しさん
NGNG0998v(^・^)v
NGNG0999v(^・^)v
NGNG1000v(^・^)v
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。