C++相談室 part77

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/02/13(土) 01:47:18
Pimplイディオムはよく使うな
953デフォルトの名無しさん:2010/02/13(土) 01:52:53
使うな
954947:2010/02/13(土) 02:00:06
私もなんだかんだでpimplは愛用します。
955デフォルトの名無しさん:2010/02/13(土) 02:08:52
俺は inline にしたいような短い奴はクラス宣言の中に入れてしまって明示的に inline 宣言しないことが多い。
956デフォルトの名無しさん:2010/02/13(土) 02:10:38
やばい
.netになれてど忘れしてもた

ライブラリを作ってるんだがその内部でネットワーク経由でデータを受信して
呼び出し元に返す場合は内部で使ってるstd::string(もしくはCString)を
返しちゃだめなんだっけ?・・・
957デフォルトの名無しさん:2010/02/13(土) 02:20:25
先読みライブラリはないの? あと開発できるひと。
958デフォルトの名無しさん:2010/02/13(土) 02:24:04
>>956
いや読み込みはできてるし動いてるんだけど
それをライブラリとして切り離す場合にどうしてたっけかな・・・と思って

Cのころはファイルの読み込みなんかだとサイズを調べて
mallocとかで領域確保してそこへ入れてそれを呼び出し元に渡して・・・
だったけどさ

C++の場合クラスとかになってきてるし、std::stringってクラスぽい動きしてるしで・・・
959デフォルトの名無しさん:2010/02/13(土) 02:33:27
>>951
基本的に inline は使わない。
性能に有意な差が出ると確認できたときに付ける。
template だろうとなかろうと判断基準は変わらないし、変えなくていい。
960デフォルトの名無しさん:2010/02/13(土) 02:50:31
templateはinlineにしない意味はほとんどないじゃない
exportを実装してようがリンク時コード生成を考えたらビルド時間は変わらないし
961デフォルトの名無しさん:2010/02/13(土) 02:50:34
c_str()じゃだめなん?
962デフォルトの名無しさん:2010/02/13(土) 03:12:56
inlineなんてどうせシカトされるというか
書かなくてもインライン化したりするので書かない
963デフォルトの名無しさん:2010/02/13(土) 03:29:30
開発環境:vc++ 2008 expless edition, boost
経験言語:java
vc++を使ってc++の勉強をしているのですが、クラスのポインタにnewとdeleteをすると管理が怖いのでboostのshared_ptrを使いjavaライクにしようかと考えています。
この解決方法は一般的なのでしょうか。それとも一般的にスマートポインタなど使うのは邪道なのでしょうか。
また、スマートポインタに隠蔽することにより隠蔽されたオブジェクトのpublic変数や関数をコード保管機能により呼び出せなくなりました、これの解決方法はあるのでしょうか。
964デフォルトの名無しさん:2010/02/13(土) 03:41:19
>>960
逆だろ。わざわざ付ける意味が無いんだよ。
965デフォルトの名無しさん:2010/02/13(土) 03:44:25
>>963
スマートポインタを使うことが邪道だということは無いが、 Java ライクにしようという目的は邪道だ。
「管理が怖い」とか、非科学的な判断基準を持ち出すべきではない。

スマートポインタに入れることは隠蔽じゃない。補完の件は知らないが、たいした問題じゃないだろう。
966デフォルトの名無しさん:2010/02/13(土) 03:46:31
>>964
オレに逆らうとはいい度胸だな
わざわざ付ける意味が無い証拠は?
967デフォルトの名無しさん:2010/02/13(土) 03:47:13
コンパイラは無視してもいい事になってるから
968デフォルトの名無しさん:2010/02/13(土) 03:50:52
デフォルトが非inlineなのに「inlineにしない意味」とか言い出すのが意味不明。
969デフォルトの名無しさん:2010/02/13(土) 03:55:51
>>965
やはりjavaライクにすべきではないのですか。
僕はjavaに慣れ親しんでいるのでコードのすみずみまで頭に叩き込まずともjavaライクであればささいなきっかけでコードの多くの部分を思い出せると考えました。
しかし、他の人にソースを共有する場合は他の人が僕のルールを理解していることはないのは確実なのでそれは良くないことかもしれないと思います。

コード保管は頭の文字をいれるとそれから予測できる変数や関数を列挙してくれる機能なのですが、ポインタがスマートポインタの中にいるので->で参照したときにコード保管できないという意味で隠蔽という言葉を選択しました。
誤解を招くような言葉で申し訳ございませんでした。
970デフォルトの名無しさん:2010/02/13(土) 03:57:32
>>960はプログラムやる資格ないな。
971デフォルトの名無しさん:2010/02/13(土) 03:59:40
いいんじゃねぇの
Javaライクというのがメモリの管理を自動化したいという意味なら
循環参照に気をつければ

スマポ経由だってインテリセンスは効いてた様な
972デフォルトの名無しさん:2010/02/13(土) 04:18:56
>>971
ありがとうございます。自己的な理由ではありますがスマートポインタを採用しようかと思います。

僕の環境ではboostをインストールし、
インストールされたディレクトリを参照してインクルードしているだけなのですが

たとえば
class Test {
public: int a;
Test() {
a = 100;
}
~Test() {
}
};
というクラスがあり。
コードの一部に以下のようなコードを仕込み試したところ。


shared_ptr<Test> p(new Test());
printf("%d\n", p->a);//インテリセンス無効
Test *p2 = new Test();
printf("%d\n", p2->a);//インテリセンス有効

スマートポインタを介したpはインテリセンスできず、直接のポインタであるp2はインテリセンスでaを参照できました。
なんらかの設定、もしくはアドインのようなものを入れればスマートポインタはインテリセンスできるのでしょうか。
973デフォルトの名無しさん:2010/02/13(土) 04:28:22
>>972 Visual Studio スレ逝け。
974デフォルトの名無しさん:2010/02/13(土) 10:30:36
>>972
インテリセンスに過度な期待は持たないで。
975デフォルトの名無しさん:2010/02/13(土) 10:46:46
Boostスレにも似たようなのが
976デフォルトの名無しさん:2010/02/13(土) 10:50:21
VSスレに行けと言われたのにBoostスレいったのか
まぁ解決?してるようだしいいんじゃね
977デフォルトの名無しさん:2010/02/13(土) 10:52:15
ああ同一人物か
流行ってるのかとおもた
寝ぼけてるな俺
978デフォルトの名無しさん:2010/02/13(土) 11:22:09
1時間放置してみろ
979デフォルトの名無しさん:2010/02/13(土) 12:01:34
>>977
じっくり反省しろ
980デフォルトの名無しさん:2010/02/13(土) 13:24:32
このスレにおいては
インテリセンスって言葉がでたらあぼんする位の勢いで
いいんじゃね?
981デフォルトの名無しさん:2010/02/13(土) 13:47:24
>>977
相変わらずだなあ。まったく・・・
982デフォルトの名無しさん:2010/02/13(土) 18:12:53
ftp://ftp.kde.org/pub/kde/stable/4.3.3/src/kdebase-4.3.3.tar.bz2
このtarボールド(kdeプロジェクト)を展開すると、いくつかのソフトが入っているます
その中で、dolphinというソフトをideで見たいのですが、make fileの作り方がわかりません
お力をお貸しください
983デフォルトの名無しさん:2010/02/13(土) 18:26:33
984デフォルトの名無しさん:2010/02/13(土) 18:46:33
>>983
スレ違いじゃないな
985デフォルトの名無しさん:2010/02/13(土) 19:43:22
make makes manyなんちゃらつースレ落ちたのか
986デフォルトの名無しさん:2010/02/13(土) 21:59:42
>>964
>>968
意味不明だ
要説明
987デフォルトの名無しさん:2010/02/13(土) 23:18:57
988デフォルトの名無しさん:2010/02/13(土) 23:43:24
>>986
逆だろ。まずはお前から、 template に限って inline を使う基準を分けるメリットを挙げてくれ。
そうじゃないとさっぱりわからん。
989デフォルトの名無しさん:2010/02/13(土) 23:50:14
>>988
> 逆だろ。まずはお前から、 template に限って inline を使う基準を分けるメリットを挙げてくれ。
メリットが増えるんじゃなくてinlineにするデメリットが減るって言いたいんじゃないの?
> そうじゃないとさっぱりわからん。
そんなに分からないのか。
merit - demeritの値を考えるとき、
meritが不変でdemeritが小さくなったら
merit - demeritの値は大きくなる
ってことがまさか分からない?
990デフォルトの名無しさん:2010/02/13(土) 23:53:56
最近のコンパイラだと
inlineしてもinlineしなかったり
inlineしなくてもinlineされたりするから
ぶっちゃけ意味ないだろ
コンパイラによっては強制inline用の予約語とかあるけど
そんな一般性を失ってまで指定してもしょうがないし
991デフォルトの名無しさん:2010/02/13(土) 23:56:15
>>989
template に限れば inline にするデメリットが減るのはわかる。最初の >947 から書いてある。

だからと言ってわざわざ template に限って inline を付ける基準を変えることにメリットはないでしょ?
そこがわからない。
992デフォルトの名無しさん:2010/02/14(日) 00:02:55
inlineスレ
993960かつ986:2010/02/14(日) 00:19:11
込み入った議論もしたいが規制中なので困難
クラス定義で手間や重複が最小なのはクラス定義にメンバ関数の定義を含めるやりかた。つまりinline
しかし、依存性を軽減してコンパイルの無駄を抑えるためにメンバ関数の宣言と定義を別にしているわけ
templateでは非inlineにしても依存性を軽減しないので、inlineにしない意味がないといったわけ
994989:2010/02/14(日) 00:31:12
>>991
> だからと言ってわざわざ template に限って inline を付ける基準を変えることにメリットはないでしょ?
template に限って inline を付ける基準を変える
なんて誰も言ってないだろ?
むしろ
     基準は同じ
だから、
merit - demeritの値が大きくなる場合が増える
templateでは自動的にinlineにすべきという
判定が増えるってこと。
995デフォルトの名無しさん:2010/02/14(日) 00:34:20
> inlineにしない意味がない

inline 指定子を書くべきってこと?
996デフォルトの名無しさん:2010/02/14(日) 00:48:08
>>993
クラス定義にメンバ関数の定義を含めるかどうかの話なら同意だ。
クラステンプレートのメンバ関数を分けるための記述はめんどくさいしねぇ。
997デフォルトの名無しさん:2010/02/14(日) 01:03:30
>>994
めんどくさい人だな。
template かどうかで inline を付けるかどうかの「判断」を変える必要が無いって言ってるんだよ。

inline の指定によってが性能に有意な差が出ると確認できたところで、コンパイル時の依存関係を
嫌って効率を落とすような判断はしないでしょ。

inline って付ければ必ずメリットが生まれるとでも思ってるのか?
998デフォルトの名無しさん:2010/02/14(日) 01:29:26
うめ!
999デフォルトの名無しさん:2010/02/14(日) 01:44:15
たけ!
1000デフォルトの名無しさん:2010/02/14(日) 01:44:30
どうも
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。