- 1 名前:デフォルトの名無しさん [2010/03/05(金) 16:51:13 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.71【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1264774545/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め) ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
- 21 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 22:28:41 ]
- codepad.org/kFwYJHQs
#define _SECURE_SCL 0 しない場合2と3が遅くなる VC以外は知らない
- 22 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 23:02:18 ]
- >>21
2と3が遅くなるのに4は遅くならないの?
- 23 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:05:55 ]
- CLI SDK MFCの3種類があるらしいけど
CLIは.NETというのがわかった あとの二つがよくわからない
- 24 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:20:47 ]
- >>23
Windows向けの開発をしたいということだね? MFCは過去の遺物なので忘れていい。CLIは筋が悪いので忘れていい (.NETを使うならC#を使えばいい)。なので、C++なら Windows SDK (Win32 APIとか呼ばれる)が無難だと思う。
- 25 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 02:49:46 ]
- >>24
ども SDKもVC++2008EEもそれぞれ無料のを落とせるんですよね? それとその3つの中で処理速度を順番で表すとどうなりますか?
- 26 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 11:53:02 ]
- newをするとメモリが確保されますが
メモリを確保する機能は言語の物ですか、それともOSの物なんですか?
- 27 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 12:00:39 ]
- >>21
ECC 6.2.1では1が最も早く、2は1の2倍掛かり、3と4は10倍掛かる 最適化が糞だな VC9の場合は2が1の4万倍、3が1の15万倍掛かる 1と4は最適化で消えて行くのだと思う codepad.org/CCYieupw (Windows専用)
- 28 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 12:04:15 ]
- OSのものです
- 29 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 13:03:16 ]
- >>26
実際に何がメモリを確保しているか(実装)という点ではOSの機能であるかもしれない。 でも、どこで動作が定められているか(インターフェース)という点では言語の機能と言える。 プログラマから見たnewの動作はOSが無い環境でも同じになる。
- 30 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 14:58:55 ]
- この言語はちょっとミスったらOS暴走して
再起動しないといけなくなったりするの?
- 31 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:03:25 ]
- >>30
今時、まともなOS上ではそんな言語はない。 尤も、実装されているOSによっては当然そうなる場合もあるが。
- 32 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:17:40 ]
- ひどいときには爆発するから気をつけろ
- 33 名前:26 mailto:sage [2010/03/12(金) 16:15:13 ]
- >>29
ありがとう
- 34 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:49:37 ]
- >>32
ミサイルに載せる奴じゃないはずさ
- 35 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:57:49 ]
- よくわかんないんだけど
もしポインタの使い方が間違った場合 ソフトだけが暴走して終了すればなんともないの? OSにダメージが及ぶことはない?
- 36 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 20:02:36 ]
- 運が悪いと爆発するっていってんだろ
- 37 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:01:47 ]
- 組み込み怖い組み込み怖い
- 38 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:03:29 ]
- >>35
まずありえないだろうけど 最悪の場合にはコンピュータでできることならなんでも起こりうる HDDがフォーマットされたり ウイルスをばら撒いたり 恥ずかしいファイルが流出したりね
- 39 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:33:46 ]
- 意図的に扱いを間違えるとコンピュータウィルスと呼ばれるものが出来上がるわけだ
- 40 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:50:57 ]
- >>30
DOSやWin3.1のころはそうだったな。 今はアプリが落ちるだけですむ。
- 41 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:02:27 ]
- windows95の頃は一般保護違反で済むようになってたんだっけ
それでも何度か青画面出したと思うけどあれは一体なんだったんだろう
- 42 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:12:03 ]
- 95は完全じゃないけどそこそこプロテクトは掛かってる。けどまあよく落ちた。
- 43 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:33:38 ]
- 昔はC言語は怖くて使えなかったけど
今は安心して使えるんですね VC++はじめようと思います
- 44 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 18:23:46 ]
- namespace ns
{ static const hoge HOGE; } const hoge ns::Hoge = hoge(); 定数としてのグローバル変数をcppじゃなくてヘッダだけで定義したいんだけどできますか?
- 45 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 18:36:45 ]
- 処理系依存なら__declspec(selectany)とか__attribute__ ((selectany))とか
- 46 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 19:24:48 ]
- >>44
namespace ns { struct Hoge; template<bool Dummy = true> struct HogeHeaderOnlyConstants { static Hoge const HOGE; }; struct Hoge : HogeHeaderOnlyConstants<> {}; template<bool Dummy> Hoge const HogeHeaderOnlyConstants::HOGE = Hoge(); } d.hatena.ne.jp/Cryolite/20051129#p2 d.hatena.ne.jp/Cryolite/20051129#p3
- 47 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:21:34 ]
- なるほどーthx
- 48 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:18:04 ]
- *.hと*.cppが1対1でもexternって使わないとダメなんですか?
externの動きがいまいちわからない
- 49 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:34:31 ]
- extern=どこかにあるやつを使うぜ!実際どこにあるかはリンカまかせ
- 50 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:44:01 ]
- 拡張する予定が有るならextern
無いなら無名名前空間かstatic
- 51 名前:49 mailto:sage [2010/03/14(日) 14:01:47 ]
- >>49
>extern=どこかにあるやつを使うぜ! ・*.hに1つだけ変数を宣言する ・2つの*.cppから*.hに宣言した変数を使う ってことができるわけですか? >>50 >拡張する予定が有るならextern ここの拡張は、*.hと*.cppが1対nになること可能性があるって意味ですよね
- 52 名前:51 mailto:sage [2010/03/14(日) 14:02:29 ]
- 名前間違えました
>>51は48です
- 53 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:09:54 ]
- >>51
そう hoge.cpp int g_val;//実体はコレ hoge.h extern int g_val; 使う人 foo.cpp extern int g_valするかhoge.hをインクルード hage.cpp 以下同様
- 54 名前:48 mailto:sage [2010/03/14(日) 14:19:47 ]
- >>53
そうと言われても、>>49なのか>>50か分からないんですけど... ・1つの*.hを2つの*.cppで共有している ・しかし2つも*.hに変数を2つ書くのが(考えるのが)面倒い ・それじゃ、*.hに1つだけ変数を宣言して、あたかも2つ宣言したようしよう ってのがexternですね
- 55 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:26:46 ]
- とりあえず宣言と定義の違い、翻訳単位やリンケージについて調べてください
- 56 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:27:08 ]
- wisdom.sakura.ne.jp/programming/cpp/cpp24.html
の一番下のmain関数 Neko obj(::obj); の ::obj は何を指すんですか?
- 57 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:29:45 ]
- グローバル変数のobj。クラスの宣言と同時に定義してるやつ
- 58 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:53:19 ]
- >>57
ありがとうございます
- 59 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:59:28 ]
- friendって使い道あるの?
ネストクラスとかstaticメンバ関数つかえばよくね?
- 60 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:01:41 ]
- >>59
テンプレートが絡んでくるとそう簡単じゃないんだよ。 Effective C++ぐらい嫁。
- 61 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:32:10 ]
- iostreamやstdioなどの標準的なライブラリは
/usr/includeの下にヘッダファイルが保存されています 標準的なライブラリの実態はどこにあるのですか OS or コンパイラ?
- 62 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:33:33 ]
- 大抵ファイルシステム上のどこかです
- 63 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:00:06 ]
- >>61
ものによる。 /usr/include ってことはUNIX系だろうから、たいていOS付属で /usr/lib など。
- 64 名前:61 mailto:sage [2010/03/15(月) 00:11:33 ]
- >>63
普通に考えてみれば、/usr/lib/以下にありますよね /usr/libはソフトの実体が入っているな〜程度の事しか思っていませんでした /usr/libの中のデータは*.soが多いわけですし わかりました、ありがとうございます
- 65 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:10:20 ]
- >>61,64
もしかして、実体ってライブラリのことじゃなくてソースのことだった りする? それももちろん環境依存だけども。
- 66 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:09:33 ]
- Windowsでの話なのですが、
std::locale loc = std::locale(); loc = std::locale(loc, "japanese", std::locale::ctype); std::locale::global(loc); といった記述をDLLの冒頭に書いた場合、それを読み込むソフトや他のDLLにも影響は及ぶのでしょうか?
- 67 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:12:48 ]
- hoge.h
extern void hoge(); hoge.c void hoge(){内容} なんで、hoge.cには#include "hoge.h"と書かなくてもシンタックスエラーにならないんですか? C++でクラスを定義する時は、#include "hoge.h"と書かないとシンタックスエラーになるのに
- 68 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:16:19 ]
- >C++でクラスを定義する時は、#include "hoge.h"と書かないとシンタックスエラーになるのに
ならねーよ
- 69 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:21:41 ]
- >>67
何にも理解してねぇんだな。 #includeがおまじないの類だと思っている節が。 だれかおせーてやれ
- 70 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:28:23 ]
- >>66
個々のランタイムで管理しているので同じランタイムにリンクされているモジュール間で影響を受ける VC++2005で動的リンクで作ったなら同じプロセスに読み込まれてるVC++2005で動的リンクしているDLLが影響を受ける VC++6や2008で作ったものや2005でも静的リンクしたものは別のランタイムに属するので影響されない
- 71 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:28:54 ]
- // 関数hogeの宣言
extern void hoge(); // 関数hogeの定義 void hoge(){内容} // 関数hogeの参照 hoge(); // クラスFooの定義 class Foo { Foo() {} static FOO() {} }; // クラスFooの参照、インスタンスfooの定義 Foo foo; // クラスFooの参照 Foo::FOO(); // インスタンスfooの参照 func(foo);
- 72 名前:67 mailto:sage [2010/03/15(月) 13:33:57 ]
- >>71
thx でもさ、C++の時は#include "hoge.h"って書かないと コンパイラ様が怒ってくるんだよ
- 73 名前:69 mailto:sage [2010/03/15(月) 13:42:44 ]
- >>72
それは > C++の時は というか、単に "hoge.h" に クラスFooの定義 を書いているってだけじゃないのか? #include "hoge.h" の #include ってのは、"hoge.h" をその場所に取り込め(コピペ的に機械的に取り込め) って意味だから、これがないと "hoge.h" に クラスFooの定義 を書いている場合は クラスFooの定義 が見つからないとコンパイルエラーになるだろうけど。 でも#include "hoge.h"をしなくてもソースファイルにもう一度 クラスFooの定義 を 書けば別に#include "hoge.h"しなくてもエラーにはならない。 意味分かってくれる?
- 74 名前:69 mailto:sage [2010/03/15(月) 13:58:57 ]
- >"hoge.h" に クラスFooの定義 を書いている場合は
>クラスFooの定義 が見つからないとコンパイルエラーになるだろうけど。 クラスの定義はどうやって見つけるんですか? 知りたいことは、そこなんです
- 75 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:32:51 ]
- // hoge.c
class Hoge { }; Hoge hoge;
- 76 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:35:13 ]
- よくライブラリで構造体を
struct tagHOGE{}HOGE; みたいにtagなんちゃらにするのは何でですか
- 77 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:44:00 ]
- >>76
慣習です。 C/C++ではstruct tagHoge {...} hage;としたときにhageの型はstruct tagHogeになります。 C++ではtagHogeのようにstructを省略できますが、Cでは省略できません。 その為、しばしばCではtypedef struct tagHoge {...} Hoge;のようにtypedefすることになります。 このとき、typedef struct Hoge {...} Hoge;とするとC++ではエラーになります。
- 78 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:09:36 ]
- 了解しました
- 79 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:28:15 ]
- 同じにしてもC/C++共にエラーにならない
まあそういうコンパイラもあるのかもしれないけど
- 80 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 19:32:54 ]
- >typedef struct Hoge {...} Hoge;とするとC++ではエラーになります。
ならんならん JIS X3014 附随書C 7.1.3 にも全く同じ例が載ってる
- 81 名前:デフォルトの名無しさん [2010/03/15(月) 20:28:50 ]
- class Hoge{
private: int Num; double huga[Num]; public: Hoge(int Num); }; Hoge::Hoge(int Num){ this->Num = Num; }
- 82 名前:デフォルトの名無しさん [2010/03/15(月) 20:33:34 ]
- 中途半端だった・・・
こういった風にhugaのサイズを宣言したいのですが、これではコンパイルができません。どういう風にかいたらいいでしょうか?
- 83 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:35:46 ]
- >>81
std::vector を使う
- 84 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:51:36 ]
- class aaa
{ static const int bbb = 100; double ccc[bbb]; };
- 85 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:54:46 ]
- struct ar{double*const p;ar(size_t a):p(new double[a]){};~ar(){delete[] p;}double&operator[](size_t a){return *(p+a);}}*huge;
// を new deleteでつかう。
- 86 名前:66 mailto:sage [2010/03/16(火) 09:18:35 ]
- >>70
詳しく説明していただき、大変参考になりました。 ありがとうございました。
- 87 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 09:50:03 ]
- >>85
コピーコンストラクタと代入演算子は書こうぜ
- 88 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 10:06:23 ]
- >>76
blogs.msdn.com/oldnewthing/archive/2008/03/26/8336829.aspx これだな。 標準化前のCではタグ名の名前空間が分かれていなかったことが原因で、 それを受けた Windows プログラミングによってさらに広まったものだろう。 tag ならまだしも下線で始める奴が多くて困る。 www.kijineko.co.jp/tech/superstitions/tags-begin-in-underscore.html
- 89 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 10:10:47 ]
- >>80
実はまだ active issue になってたりする。 www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
- 90 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:33:03 ]
- JIS版C++ではOKだがISO版C++ではNG…ということか?
- 91 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 02:06:50 ]
- >>90
んなこたーない。ISOもJISも内容は基本的に同じ。 元々の規格の意図としては同じ名前も使えるようにしたかったようだけど、 厳密に解釈していくとなにやら矛盾のある状態になっているようだという話。
- 92 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 11:36:16 ]
- VistaにVC2003をインストールしたんですが、ダイアログデザイン
編集時にプロパティウィンドの中身が一切表示されません。 サポート対象外なのはわかっていますが、解決策があれば 教えてもらえないでしょうか
- 93 名前:デフォルトの名無しさん [2010/03/17(水) 18:31:40 ]
- class abc
{ abc(int); ・・・ } --- list<abc> a1; for (int i=0;i<10;i++){ a1.push_back( new abc(i)); } こんな感じで作ったa1を削除する時って、 a1の要素のabcのメモリ解放は、 ループさせて、いちいち要素ごとにメモリ解放をしていかないとダメですか? それとも、 a1.clear();で、全部やってくれるモンなのですか?
- 94 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 19:10:06 ]
- 自分でやんないとだめ
- 95 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 20:44:35 ]
- >>92
好きなのを選べ 1. WindowsXPをインストールする。 2. VisualStudio2008ExpressEditionをインストールする。
- 96 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:13:41 ]
- あるクラスAがあります。
このクラスをクラスBがコンポジションします。 クラスAのprotectedメンバー変数にクラスBからアクセスしたいのですが、継承した場合と違ってアクセスできません。 どのようにアクセスすべきでしょうか? A内にpublicな関数をつくり、その関数がprotectedメンバーの値を返すようにすればいいのでしょうか?
- 97 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:29:59 ]
- お好きにどうぞ。
- 98 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:46:37 ]
- どうするのが一般的なんでしょうか?
アクセスしたい変数は2個あって、そのために関数を2個用意するのはバカらしい感じがします。
- 99 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:49:21 ]
- friend
- 100 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:55:41 ]
- >>98
二個用意するのが馬鹿らしいなら設計を見直しましょう。
- 101 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:21:25 ]
- アクセス制御精査を心がけてるよと見せるのが主目的なら
抽出用一時オブジェクトとメンバ関数へのfriend指定を駆使して記述すれ
- 102 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:34:18 ]
- >>96
共通のメンバーを抜き出したクラスをクラスA,Bから参照すればいい。
- 103 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:42:07 ]
- >98
このスレッドに書き込む労力を アクセッサの実装に使ってください
- 104 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:49:32 ]
- >>98
getter setterは邪悪
- 105 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:01:52 ]
- >>93
それ、 a1.push_back(abc(i)); でよくない? どうしてもnewしなきゃならないなら、shared_ptrを使うといい。
- 106 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:50:38 ]
- >>96
Bに包含されることを前提にAを設計しているなら単にfriend指定すればいい。 そうでなければアクセサを書くか、メンバ変数自体をpublicにすればいい。
- 107 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 08:50:01 ]
- >>105
用途によっては shared_ptr をコンテナに突っ込むより ptr_vector の方がいいかもね。
- 108 名前:92 mailto:sage [2010/03/19(金) 13:29:45 ]
- やはりそうなりますかー。
ネットで調べてもそういう現象が見つからないし、 自分の環境固有の問題なのかなぁ ちなみに最近ではMFCが使われて無いみたいなこと聞きますが そうなるとウィンド周りは何で作るのが主流なんでしょう? SDK? CLI?
- 109 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 16:45:15 ]
- operator boolをそのまま実装すると色々とよろしくないようでsafeboolなるテクニックがあるようですが
ググっても何をやってるのかさっぱりわかりません どういう原理でsafeになるのでしょうか?
- 110 名前:デフォルトの名無しさん [2010/03/19(金) 17:09:07 ]
- Linuxでgccを使っています。
プログラム自身が使用しているメモリ量と、システムのフリーメモリ量を取得する方法を教えてください
- 111 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 17:33:51 ]
- >>110
OS板、OSスレでどうぞ。
- 112 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:40:36 ]
- >>109
more c++ イディオム safe bool でググるんだ。 普通にはアクセスできないポインタ型を変換演算子で返せば、ifで評価できるし、あれこれ暗黙な変換がされなくて済む。
- 113 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:42:30 ]
- int a=p+1;こんなのがsafeじゃない意図されない使い方
- 114 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:48:46 ]
- C++0xのexplicit conversion operatorsがあればsafe bool idiomはいらない子ですか?
- 115 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 19:56:24 ]
- そうだね。
でも、コンパイラの実装を待つことなく工夫してsafe boolを手に入れられる拡張性がC++のいいところだよね。
- 116 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 20:55:43 ]
- C++のコードをDLLにするのってめんどいな
例外出しちゃいけないからわざわざ例外捉えるだけのラッパー書かないといけないし 引数と返り値にSTL使えないし
- 117 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 22:58:13 ]
- それを突き詰めていくとな、いつのまにか劣化COMを作っている事に気づくのさ
- 118 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:02:59 ]
- >>116
多分、結局インタフェースコードはCかCOMにすることになると思うよ 労力ばかり無駄にかかる上に、CのDLLやCOMより相互運用性において劣る
- 119 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:06:13 ]
- WindowsならCOMでいいけど
MacやLinuxはどうすんの?
- 120 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:07:22 ]
- >>112-115
ぐぐってみてこのページを見たのですが ttp://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E5%AE%89%E5%85%A8%E3%81%AA_bool(Safe_bool) operator bool()ではなくoperator bool_type() constでもよいのでしょうか? で、operator bool_type() constの挙動は ok_がtrueであればthis_type_does_not_support_comparisons()のアドレスを返し、0以外の値なのでtrueと動作する falseならば0をかえしfalseとなる 例文の if (t2 == t1)や if (t1 < 0) のばあいはprivate関数のアドレスを比較するのでコンパイルエラーをはく ということでしょうか この場合なぜメンバ関数のアドレスを返り値とするのでしょうか? 質問続きで申し訳ありませんがよろしくお願いします
- 121 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 23:10:44 ]
- Cでいいんじゃないの
必要に応じてヘッダのみ、またはスタティックリンクのラッパーを書いて提供 つまり ユーザーコード - C++ラッパー - DLL境界 - Cインタフェース - C++実装 こうなる 面倒すぎて反吐が出るね
|

|