スレを勃てるまでもないC/C++の質問はここで 10
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/05/14(木) 20:35:36過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
http://pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
http://pc12.2ch.net/test/read.cgi/tech/1240022781/
0685デフォルトの名無しさん
2009/06/06(土) 16:16:560686デフォルトの名無しさん
2009/06/06(土) 16:23:07> char* p; のように書く人は p と q をポインタにしたいとき
> char* p, *q; のように非対称に書いたりするので混乱必至。
そうでもないよ。俺は普段1行目のように書くけど、2行目のようなケースは
まず第一に「滅多に書かない」し、もし書く時は char *p, *q; って書く。
まぁ、宗教。
0687デフォルトの名無しさん
2009/06/06(土) 16:26:38ダブルポインタのほうがかっこよくない?
まぁ、宗教。
0688デフォルトの名無しさん
2009/06/06(土) 16:29:15*& でいいんじゃない?っていうか、>>681のような質問って時々出てくるけど
その設計にどういうメリットがあるのかしら?
ポインタの管理はクラスの外でやってるし、そもそも内部の詳細を公開しているし・・・
0689デフォルトの名無しさん
2009/06/06(土) 16:29:330690デフォルトの名無しさん
2009/06/06(土) 17:09:370691デフォルトの名無しさん
2009/06/06(土) 18:20:00他人の作ったメソッドや関数(例えばSTLやboost)が投げる可能性のある例外を調べる方法は仕様を読む以外ないんでしょうか?
強制的に例外を投げさせるオプションみたいなものがあるんでしょうか?
コンパイラはVC++EE2008を使っています
0692デフォルトの名無しさん
2009/06/06(土) 18:27:020693デフォルトの名無しさん
2009/06/06(土) 22:29:11do{〜;〜;〜;}while(0)
とすると良いとききました。
しかしこれだと返り値を持たせられないため、関数形式のマクロが書けません。
複文マクロでありながら、返り値を持たせる方法はありませんか?
0694デフォルトの名無しさん
2009/06/06(土) 22:34:00エラーがわかりやすい。 実行時間が計測できるなどりメリット。
0695デフォルトの名無しさん
2009/06/06(土) 22:34:51インライン関数などの知識は十分あるんですが、
どうしても変なマクロが書きたいんです。
マクロでしかできない変な処理なんです。
0696デフォルトの名無しさん
2009/06/06(土) 22:46:210697デフォルトの名無しさん
2009/06/06(土) 22:48:56ありがとうございます。
もう考えてあります。
ただ、try catchブロックを盛り込みたく、それがカンマ演算子に合わせられないのです。。。
そしてマクロでしかできない処理というのは「マクロ引数から#で文字列化する」というような
いわばリフレクション的な処理も含んでいる物だからです。
まあ無くても支障ないのですが、一般化して再利用可能にしておいたら便利かなと思って
変態マクロに挑戦しているところです。
0698デフォルトの名無しさん
2009/06/06(土) 22:50:26#define FOO(X) do{;;(X)=hoge;}while(0)
0699697
2009/06/06(土) 22:55:03ありがとうございます。
副作用を持たせるわけですね。
最終手段として考慮します。
しかし当面はもうちょっと挑戦してみます。
返り値はbool型になる予定でして、疑似関数の形の方が分かりやすいので。
関数テンプレートや文字列結合演算子、無名構造体など、
もちえる言語仕様の知識をフル活用してみます。
0700デフォルトの名無しさん
2009/06/06(土) 23:20:30int size=sizeof(a)/sizeof(float);
}
これでsizeに配列aの個数が入ると思ったのに1になる。何で?
0701デフォルトの名無しさん
2009/06/06(土) 23:31:220702デフォルトの名無しさん
2009/06/06(土) 23:31:55void func(float a[10]){
とかにすれば10って出るはず
0703デフォルトの名無しさん
2009/06/06(土) 23:34:47としても
void func(float *a){
となるから
>>702
なんねーよばか
0704デフォルトの名無しさん
2009/06/06(土) 23:35:53でもそれだとint size=10;ってすることと一緒だから意味無いよね
受け取った配列の数によって処理を変えたいんですがどうすればいいですか?
0705デフォルトの名無しさん
2009/06/06(土) 23:38:08#define func(x) func_(sizeof(x)/sizeof(float))
void func_(unsigned size);
0706デフォルトの名無しさん
2009/06/06(土) 23:39:11二引数にして大きさを渡すする
ものすごい馬鹿みたいに思うかもしれんが
memsetやらfreadやらあるように領域の大きさを渡すのは普通
0707デフォルトの名無しさん
2009/06/06(土) 23:39:19#define numberof(array) (sizeof(array)/sizeof(array[0]))
float foo[10];
func(foo, numberof(foo));
0708デフォルトの名無しさん
2009/06/06(土) 23:48:33当たり前なんだろうけど、これにはちょっとびっくり。
普通に分かるものだとばかり思ってた
0709デフォルトの名無しさん
2009/06/07(日) 00:27:300710デフォルトの名無しさん
2009/06/07(日) 01:10:01という考え方もある。
0711デフォルトの名無しさん
2009/06/07(日) 01:14:080712デフォルトの名無しさん
2009/06/07(日) 02:22:580713デフォルトの名無しさん
2009/06/07(日) 02:57:00何かソースコードを読む際のポイントとかあるんでしょうか。
0714デフォルトの名無しさん
2009/06/07(日) 03:00:11読んでる関数の中身までは読まずに、大まかな流れを先に確認する。
0715デフォルトの名無しさん
2009/06/07(日) 03:37:32doxygen(Graphviz)で関係のグラフ化オヌヌメ
0716デフォルトの名無しさん
2009/06/07(日) 10:54:46template<typename T> class HOGE;
template<> class HOGE<unsigned char> {...;};
template<> class HOGE<unsigned short> {...;};
template<> class HOGE<unsigned long> {...;};
template<> class HOGE<unsigned int> {...;};
のように本体を書かずに、特殊化のほうをいちいち全部書くしかないんでしょうか?
0717デフォルトの名無しさん
2009/06/07(日) 11:53:120718デフォルトの名無しさん
2009/06/07(日) 12:20:01同じ副作用を保ったまま、式を文にすることは出来ます。
セミコロンを付ければ良いだけです。
例 x=3ならx=3;とすればよい。
しかし同じ副作用を保ったまま、文を式にすることは出来ますか?
その際の式の値は何だって良いとして。
例 while(flag){++x;} を ???
0719デフォルトの名無しさん
2009/06/07(日) 12:50:35class の中身の方は型によって変わらないと仮定して、
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_unsigned.hpp>
template<typename T, typename Enable = void>
class HOGE {};
template<typename T>
class HOGE<T, typename boost::enable_if<boost::is_unsigned<T> >::type>
{ // 何か
};
他の型にするなら boost::is_unsigned を適宜変更すれば OK。
型をべた書きするなら↓なんてのも可能。
#include <boost/mpl/set.hpp>
#include <boost/mpl/has_key.hpp>
template<typename T>
class HOGE<T, typename boost::enable_if<
boost::mpl::has_key<
boost::mpl::set<
unsigned int,
unsigned char
>,T> >::type>
{ // 何か
};
中身も変わってくるなら >717 の通り traits でまとめる。
0720デフォルトの名無しさん
2009/06/07(日) 13:42:55そこを関数にする。
そうすれば関数呼出式になる。
0722デフォルトの名無しさん
2009/06/07(日) 18:39:05Sentinelを付加する方法でなんかいいアイデアない?
0723デフォルトの名無しさん
2009/06/07(日) 18:43:09もっとも、C++ならSTL使え、だが。
0724デフォルトの名無しさん
2009/06/07(日) 18:57:230725722
2009/06/07(日) 19:00:27i=begin; end+1=eoloop; while(function(i++));
^^^^^^^^^←この部分
0726デフォルトの名無しさん
2009/06/07(日) 19:01:00それを参考にしろとは言わんが
0727デフォルトの名無しさん
2009/06/07(日) 21:22:20今作ってるプログラムをこれ使って大幅に書き換えようかなと思ってるんだけど
0728デフォルトの名無しさん
2009/06/07(日) 21:39:06ソースコードの量が増える
保守するとき読めればいいが
そんな保証などない
将来性にかけて拡張性に優れた設計にするには
優れた設計能力が必要
後からの変更は1からのやり直し
0729デフォルトの名無しさん
2009/06/07(日) 21:48:20Qtのこと?
俺もQtの設計は美しいと思ってるし、
いまさらMFCやろうとしてる(まずいないがw)やついたらQtを紹介してる
マイナス面は、以前はGPLだったけどそれも変更になってLGPL
不満といえばdllのサイズぐらいかな?
マルチOSなのもおいしいところ
0730デフォルトの名無しさん
2009/06/07(日) 21:56:43std::for_eachもいやならBOOST_FOREACHはだめ?
0731デフォルトの名無しさん
2009/06/07(日) 22:02:31そのインターフェイスじゃないだろ
0732デフォルトの名無しさん
2009/06/07(日) 22:11:32GUI以外の事も出来るの?
0733デフォルトの名無しさん
2009/06/07(日) 22:18:02何故か俺の中で、
フジコフジオのイメージが払拭できない
0734デフォルトの名無しさん
2009/06/07(日) 22:21:55コンテナ、ネットワーク、XML、データベースとか一通り
機能制限はあるが組込み向けやXサーバーなしでもGUIが使えたり
0736デフォルトの名無しさん
2009/06/07(日) 22:55:36LGPLだと静的リンクはアウトだね
動的リンクなら商用非公開おk
0737デフォルトの名無しさん
2009/06/07(日) 23:03:140738732
2009/06/07(日) 23:06:54そんなの禁止しても意味ないだろうけど・・・。
>動的リンクなら商用非公開おk
これはつまりDLLを付属させて配れってこと?
0739デフォルトの名無しさん
2009/06/07(日) 23:14:11強制じゃないけど
staticリンクでその条件を満たすのはかなりしんどい
0740デフォルトの名無しさん
2009/06/07(日) 23:14:53そうだよ配っていいんだよ
0741デフォルトの名無しさん
2009/06/07(日) 23:28:13「QtのDLLを付属させてスタティックリンクしないようにするかぎり」
無償でクローズドソースの商用利用が可能
ということか。
Qtいいな。
…ちょっと考えてみようかな。
0742デフォルトの名無しさん
2009/06/08(月) 02:12:57分かりやすい解説サイト教えてください
0743デフォルトの名無しさん
2009/06/08(月) 02:20:00ggrks
相当前からあるソフトで、情報も腐るほどあるぞ
ちなみにそのウィザードもQtでできてる
0744デフォルトの名無しさん
2009/06/08(月) 03:44:59クラスとどう違うんだ?
0745デフォルトの名無しさん
2009/06/08(月) 03:49:360746デフォルトの名無しさん
2009/06/08(月) 04:18:250747デフォルトの名無しさん
2009/06/08(月) 04:19:38C++のテンプレートについて教えて
やっぱクラスとの違いじゃなくてどういう時に使うのか
どんなニーズによってできたのか教えて
0748デフォルトの名無しさん
2009/06/08(月) 04:27:420749デフォルトの名無しさん
2009/06/08(月) 06:46:52C++を学びたいのですが、どの本がお薦めでしょうか?
0750デフォルトの名無しさん
2009/06/08(月) 06:47:04天と地ほど違うと思うけど。
[タイヤキを作るための金属の鋳型]
と
[食べられるタイヤキ]
の違い。ぜんっぜん違う。
0751デフォルトの名無しさん
2009/06/08(月) 06:56:11このスレに行け。
【コメント】doxygen【コンソメ】
ttp://pc12.2ch.net/test/read.cgi/tech/1212144627/
オススメは以下。
Graphviz
ttp://www.graphviz.org/
doxygenの文字化け対策 - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.1
ttp://d.hatena.ne.jp/kmt-t2/20090403/1238718375
Let’s use doxygen!
ttp://www.fides.dti.ne.jp/%7Eoka-t/doxygen.html
無題ドキュメント
ttp://www.sat.t.u-tokyo.ac.jp/~tetsuya/homeNew/research/Tips/doxygen.htm
SourceForge.net: sakura-editor ≫ DoxygenComment
ttp://sakura-editor.wiki.sourceforge.net/DoxygenComment
Doxygenマニュアル
ttp://www.doxygen.jp/manual.html
Doxygen公式
ttp://www.doxygen.jp/
0752デフォルトの名無しさん
2009/06/08(月) 10:12:17それクラスとインスタンスの違いでなくて?
テンプレートはその鋳型を付け替えるとタコ焼にも今川焼きにもなる台とか
0753デフォルトの名無しさん
2009/06/08(月) 11:03:190754デフォルトの名無しさん
2009/06/08(月) 12:56:010755デフォルトの名無しさん
2009/06/08(月) 13:03:260756デフォルトの名無しさん
2009/06/08(月) 13:24:48女子供は股開いてればいいんだよ
0757デフォルトの名無しさん
2009/06/08(月) 13:34:280758デフォルトの名無しさん
2009/06/08(月) 13:49:240759デフォルトの名無しさん
2009/06/08(月) 13:58:54同じ親クラスから継承した子クラスという条件内であれば可能。
もしくは、void*で持たせれば、多分なんでもおkだけど。
0760750
2009/06/08(月) 16:12:44そうとも言えるな。
なら俺方式で言うなら
クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか]
クラス=[タイヤキを作るための金属の鋳型]
インスタンス=[食べられるタイヤキ]
とでも言えばいいかな。
0761デフォルトの名無しさん
2009/06/08(月) 16:55:300762デフォルトの名無しさん
2009/06/08(月) 17:42:54名前空間 foo と、それとは別に名前空間 bar::foo があるとします。
このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。
なお、環境はWinXP、C++、VisualStudio2005です。
0763デフォルトの名無しさん
2009/06/08(月) 17:46:200764762
2009/06/08(月) 17:53:04あるクラス内に、別クラスをメンバ変数として取り込む時、
その別クラスが書かれたヘッダファイルをインクルードするのではなく、
先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?
さて、その別クラスの名前が、名前空間 bar の下にあるとき、
namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?
>>763
ありがとうございます。
なんで思いつかなかったんだろう、自分。
0765デフォルトの名無しさん
2009/06/08(月) 18:40:270766デフォルトの名無しさん
2009/06/08(月) 18:48:370767デフォルトの名無しさん
2009/06/08(月) 18:51:59あなたのいうクラスに名前が付いていないので
説明の便宜上
あるクラス=MyClass, 別クラス=fooとします。
まずは本題からちょっとそれた話から。
> その別クラスが書かれたヘッダファイルをインクルードするのではなく、
> 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?
あります。
しかし
> あるクラス内に、別クラスをメンバ変数として取り込む時、
この場合は前方宣言Forward declarationだけでは足りません。
というのも、
class MyClass {int m_num;std::string m_str;foo m_var;}
のようにメンバ変数としてfoo型変数を使いたい場合、
fooが不完全型なのでそのサイズがわからず、したがって
MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。
前方宣言で足りるのはfoo型メンバ変数ではなく
foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、
あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。
0768デフォルトの名無しさん
2009/06/08(月) 18:54:54cin>>eq;
#define function(x) (eq)
cout<<function(1);
みたいなことができませんんか?もしくは別の方法があったら教えてください
0769767
2009/06/08(月) 18:54:56前方宣言で足りるのは
メンバ関数の引数の型としてfoo型を使用する場合
や
typedefとかかな。
> さて、その別クラスの名前が、名前空間 bar の下にあるとき、
> namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?
それでいいと思いますが。
class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ?
もし有識者がいらしたらそっちを信用してください。
0770767
2009/06/08(月) 18:56:45意味不明ですが、どういうことですか?
プリプロセッサにより
cin>>eq;
cout<<((eq));//xは無視される
として処理されるだけですが。。。
0771デフォルトの名無しさん
2009/06/08(月) 19:01:07768に書いたのはあくまでイメージです。言葉足らずですみません
私がしたいことは引数にある文字列を数式として扱いたいのです
もしくはcinで入力した式をプログラムで処理したいのですが
0772デフォルトの名無しさん
2009/06/08(月) 19:02:27�@double配列と、�Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための
コードを書いて実行してみたら�Aのほうが速かったです
環境はItanium、CentOS、GCC(C++)です
これはなぜなんでしょうか?
0773デフォルトの名無しさん
2009/06/08(月) 19:04:080774767
2009/06/08(月) 19:04:19言いたいことは分かりました。
C++の知識はどのくらいありますか?
STLやBoost C++はご存じですか?
C言語じゃなくてちゃんとC++らしいコードが書けますか?
0775デフォルトの名無しさん
2009/06/08(月) 19:05:31不思議だわ。
・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか?
つまりどっちで書いても大差ないから好きな方で記述すればよか。
0776デフォルトの名無しさん
2009/06/08(月) 19:08:39c++は初めて3か月くらいですが、STLはつかったものがあるので
簡単なものなら大丈夫だと思います。
0777デフォルトの名無しさん
2009/06/08(月) 19:09:25計算時間半分くらいでした
ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした
コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・
0778デフォルトの名無しさん
2009/06/08(月) 19:11:11現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません
0779767
2009/06/08(月) 19:11:28せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。
とりあえず適当なリンクを張っておきます。
以下の中で、上に挙げられている物の方が
より優れていると思ってください。
letsboost::spirit
ttp://www.kmonos.net/alang/boost/classes/spirit.html
数式解釈プログラム - uPage
ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0
七行プログラミング
ttp://cm.xrea.cc/thread/program_001.html
LISPですが
記号数式処理
ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html
0780767
2009/06/08(月) 19:13:06>>776
Spiritで数式を解釈させるなら
boost::spiritっちゃえ!
ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/
C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
Spirit v1.6
ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/
これらが有名で質も高いと評判です。
0781デフォルトの名無しさん
2009/06/08(月) 19:14:34これでイメージが湧いたらそいつは一流のエスパーだwwwww
0782767
2009/06/08(月) 19:17:06>普通のポインタがインスタンスを持ってるかどうか
有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。
結論から言えば、
普通のポインタでしたら、そんな方法はありません。
指し示す領域が有効かどうかなぞわかり得ません。
0784764
2009/06/08(月) 19:45:30ありがとうございます
>宣言
やっぱ namespace bar { class foo; }; って書くしか無さそうですね。
階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。
>メンバ変数
確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。
まあ、素直にアクセサ付けれ、って話ですが。
>>765
確かに、 std::string とかは上記の方法じゃ出来ないですね。
■ このスレッドは過去ログ倉庫に格納されています