Pimplイディオムはよく使うな
使うな
954 :
947:2010/02/13(土) 02:00:06
私もなんだかんだでpimplは愛用します。
俺は inline にしたいような短い奴はクラス宣言の中に入れてしまって明示的に inline 宣言しないことが多い。
やばい
.netになれてど忘れしてもた
ライブラリを作ってるんだがその内部でネットワーク経由でデータを受信して
呼び出し元に返す場合は内部で使ってるstd::string(もしくはCString)を
返しちゃだめなんだっけ?・・・
先読みライブラリはないの? あと開発できるひと。
>>956 いや読み込みはできてるし動いてるんだけど
それをライブラリとして切り離す場合にどうしてたっけかな・・・と思って
Cのころはファイルの読み込みなんかだとサイズを調べて
mallocとかで領域確保してそこへ入れてそれを呼び出し元に渡して・・・
だったけどさ
C++の場合クラスとかになってきてるし、std::stringってクラスぽい動きしてるしで・・・
>>951 基本的に inline は使わない。
性能に有意な差が出ると確認できたときに付ける。
template だろうとなかろうと判断基準は変わらないし、変えなくていい。
templateはinlineにしない意味はほとんどないじゃない
exportを実装してようがリンク時コード生成を考えたらビルド時間は変わらないし
c_str()じゃだめなん?
inlineなんてどうせシカトされるというか
書かなくてもインライン化したりするので書かない
963 :
デフォルトの名無しさん:2010/02/13(土) 03:29:30
開発環境:vc++ 2008 expless edition, boost
経験言語:java
vc++を使ってc++の勉強をしているのですが、クラスのポインタにnewとdeleteをすると管理が怖いのでboostのshared_ptrを使いjavaライクにしようかと考えています。
この解決方法は一般的なのでしょうか。それとも一般的にスマートポインタなど使うのは邪道なのでしょうか。
また、スマートポインタに隠蔽することにより隠蔽されたオブジェクトのpublic変数や関数をコード保管機能により呼び出せなくなりました、これの解決方法はあるのでしょうか。
>>960 逆だろ。わざわざ付ける意味が無いんだよ。
>>963 スマートポインタを使うことが邪道だということは無いが、 Java ライクにしようという目的は邪道だ。
「管理が怖い」とか、非科学的な判断基準を持ち出すべきではない。
スマートポインタに入れることは隠蔽じゃない。補完の件は知らないが、たいした問題じゃないだろう。
>>964 オレに逆らうとはいい度胸だな
わざわざ付ける意味が無い証拠は?
コンパイラは無視してもいい事になってるから
デフォルトが非inlineなのに「inlineにしない意味」とか言い出すのが意味不明。
>>965 やはりjavaライクにすべきではないのですか。
僕はjavaに慣れ親しんでいるのでコードのすみずみまで頭に叩き込まずともjavaライクであればささいなきっかけでコードの多くの部分を思い出せると考えました。
しかし、他の人にソースを共有する場合は他の人が僕のルールを理解していることはないのは確実なのでそれは良くないことかもしれないと思います。
コード保管は頭の文字をいれるとそれから予測できる変数や関数を列挙してくれる機能なのですが、ポインタがスマートポインタの中にいるので->で参照したときにコード保管できないという意味で隠蔽という言葉を選択しました。
誤解を招くような言葉で申し訳ございませんでした。
いいんじゃねぇの
Javaライクというのがメモリの管理を自動化したいという意味なら
循環参照に気をつければ
スマポ経由だってインテリセンスは効いてた様な
>>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を参照できました。
なんらかの設定、もしくはアドインのようなものを入れればスマートポインタはインテリセンスできるのでしょうか。
>>972 Visual Studio スレ逝け。
>>972 インテリセンスに過度な期待は持たないで。
Boostスレにも似たようなのが
VSスレに行けと言われたのにBoostスレいったのか
まぁ解決?してるようだしいいんじゃね
ああ同一人物か
流行ってるのかとおもた
寝ぼけてるな俺
1時間放置してみろ
このスレにおいては
インテリセンスって言葉がでたらあぼんする位の勢いで
いいんじゃね?
make makes manyなんちゃらつースレ落ちたのか
>>986 逆だろ。まずはお前から、 template に限って inline を使う基準を分けるメリットを挙げてくれ。
そうじゃないとさっぱりわからん。
>>988 > 逆だろ。まずはお前から、 template に限って inline を使う基準を分けるメリットを挙げてくれ。
メリットが増えるんじゃなくてinlineにするデメリットが減るって言いたいんじゃないの?
> そうじゃないとさっぱりわからん。
そんなに分からないのか。
merit - demeritの値を考えるとき、
meritが不変でdemeritが小さくなったら
merit - demeritの値は大きくなる
ってことがまさか分からない?
最近のコンパイラだと
inlineしてもinlineしなかったり
inlineしなくてもinlineされたりするから
ぶっちゃけ意味ないだろ
コンパイラによっては強制inline用の予約語とかあるけど
そんな一般性を失ってまで指定してもしょうがないし
>>989 template に限れば inline にするデメリットが減るのはわかる。最初の >947 から書いてある。
だからと言ってわざわざ template に限って inline を付ける基準を変えることにメリットはないでしょ?
そこがわからない。
inlineスレ
込み入った議論もしたいが規制中なので困難
クラス定義で手間や重複が最小なのはクラス定義にメンバ関数の定義を含めるやりかた。つまりinline
しかし、依存性を軽減してコンパイルの無駄を抑えるためにメンバ関数の宣言と定義を別にしているわけ
templateでは非inlineにしても依存性を軽減しないので、inlineにしない意味がないといったわけ
994 :
989:2010/02/14(日) 00:31:12
>>991 > だからと言ってわざわざ template に限って inline を付ける基準を変えることにメリットはないでしょ?
template に限って inline を付ける基準を変える
なんて誰も言ってないだろ?
むしろ
基準は同じ
だから、
merit - demeritの値が大きくなる場合が増える
templateでは自動的にinlineにすべきという
判定が増えるってこと。
> inlineにしない意味がない
inline 指定子を書くべきってこと?
>>993 クラス定義にメンバ関数の定義を含めるかどうかの話なら同意だ。
クラステンプレートのメンバ関数を分けるための記述はめんどくさいしねぇ。
>>994 めんどくさい人だな。
template かどうかで inline を付けるかどうかの「判断」を変える必要が無いって言ってるんだよ。
inline の指定によってが性能に有意な差が出ると確認できたところで、コンパイル時の依存関係を
嫌って効率を落とすような判断はしないでしょ。
inline って付ければ必ずメリットが生まれるとでも思ってるのか?
998 :
デフォルトの名無しさん:2010/02/14(日) 01:29:26
うめ!
たけ!
どうも
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。