C++相談室 part98

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part97
http://toro.2ch.net/test/read.cgi/tech/1343559275/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
2デフォルトの名無しさん:2012/08/25(土) 00:46:47.34
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://en.cppreference.com/w/cpp (英語)
 http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
 http://www.stroustrup.com/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。
3デフォルトの名無しさん:2012/08/25(土) 00:47:18.56
4デフォルトの名無しさん:2012/08/25(土) 00:48:47.01
5デフォルトの名無しさん:2012/08/25(土) 00:51:23.69
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
6デフォルトの名無しさん:2012/08/25(土) 00:59:12.13
テンプレここまで。あと続けたい人は好きにして。

変更点
 - 禿リンクを www.stroustrup.com に変更
 - Libraries復活(順番間違えた。Booksよりこっちが先だった。)
7デフォルトの名無しさん:2012/08/25(土) 12:46:08.11
struct edge;
struct node {
list<edge> edges;
node_data data;
};
struct edge {
node * to;
edge_data data;
};
struct graph {
vector<node> nodes;
};

こんな構造でグラフを作ってます
グラフの形状が初期化してから変わらないなら問題ないのですが
これだと要素の追加削除に無駄が多い気がします
もっとグラフの変形に強いデータ構造はないでしょうか
8デフォルトの名無しさん:2012/08/25(土) 13:12:29.80
>7
疎なグラフならstd::map<Node, Node>でよろしかろう
ここでNodeはノードを表す型で、std::map<key, value>が勝手に行うコピーに手当てされているものとする

疎でないグラフなら行列(隣接行列)でおk
行列表現のC++における最も良いやり方は知らん
98:2012/08/25(土) 13:18:29.33
というより、グラフはノード(頂点)集合Vと枝集合Eの二つ組(V, E)で一意に規定されるのだから、
- Vのは、std::map<int, Node>で表してノードのキーからNodeオブジェクトを引けるようにしておいて、
- Eのは、std::map<int, int>でノードのキーの対として表現する
等の2段構えとするのが自然かも試練
詳細は何を効率よく行いたいかによる有効グラフはEの表現で工夫する
10デフォルトの名無しさん:2012/08/25(土) 14:01:34.43
以下のコードが動くのは、環境依存ではなく、正しい挙動ですか
その場合const性を保つために暗黙的にコピー動作に変更されているということでしょうか
これをエラーや警告を出すようにすることはできませんか
特にaut

const std::wstring STRING = L"hoge";
void f(const std::wstring &s) {}
const std::wstring & e() {return STRING;}

int main()
{
  f(L"hoge");

  auto a = e();
  a.push_back(L'a');

  std::wstring s = e();
  s.push_back(L'a');
}
11デフォルトの名無しさん:2012/08/25(土) 14:41:49.34
>>10
そこコードのどこについてどんなエラーや警告を出したいの?
12デフォルトの名無しさん:2012/08/25(土) 15:09:52.69
仮想関数を持ったスーパークラスのポインタに派生クラスを入れて、
仮想関数を呼び出したいんだけどどうすればいいでしょうか?

class SuperC{
virtual bool func()=0;
};

class SubC{
virtual bool func(){ 何らかの処理 }
};

int main(){
SuperC* super=new SubC();
return 1;
}

インスタンス化する予定はないのにSuperCのポインタは宣言できませんって言われる
13デフォルトの名無しさん:2012/08/25(土) 15:10:33.85
class SubC:public SuperC{
です
14デフォルトの名無しさん:2012/08/25(土) 15:11:10.51
public:
15デフォルトの名無しさん:2012/08/25(土) 15:15:23.98
>>14
しにたいありがとう
16デフォルトの名無しさん:2012/08/25(土) 15:20:22.69
>>10
まずe()は、return STRING;であって return &STRING;ではないから、
e()の呼び出し毎にSTRINGがコピー(ていうか新規生成)されてそれがスタックに積まれて返される
(中略)
以降は呼び出し元の勝手
17デフォルトの名無しさん:2012/08/25(土) 15:22:37.97
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
18デフォルトの名無しさん:2012/08/25(土) 15:26:20.93
>>17
飽・き・た
19デフォルトの名無しさん:2012/08/25(土) 16:51:07.33
>>16 e() の戻り値、参照ですよ。
20デフォルトの名無しさん:2012/08/25(土) 16:54:23.47
auto&としない限り参照で受けないわな
21デフォルトの名無しさん:2012/08/25(土) 17:30:06.45
>>10
コピーをもろに要求する文脈だが?
変更なんかされてなく
22デフォルトの名無しさん:2012/08/25(土) 17:38:57.11
関数側で型を指定しているのにそれが無言でスルーされるのはどうなんだ
23デフォルトの名無しさん:2012/08/25(土) 17:59:56.08
ちょっと何言ってるかわかんないですねー
2416:2012/08/25(土) 22:40:17.16
>>19
スマン恥ずかしすぎてちょっと吊ってきた
25デフォルトの名無しさん:2012/08/26(日) 02:14:03.65
>>10
>これをエラーや警告を出すようにすることはできませんか
>10なコードでコピーが起きるのは、e()が参照を返した後の話なのでe()の対策ではできない
エラーにしたいとしたら、STRINGをコピー不可能なクラスにすることが考えられる
例えば class wsrting2 : public std::wstring { private: wstring2(const wstring2&); /* delete */ };
というクラスを設け、>10なコードのstd::wstringをwstring2の置換する(std::wstringのかわりにwstring2を使う
他にもっと良い方法があるかもしれんが知らん

26デフォルトの名無しさん:2012/08/26(日) 08:15:46.30
>>10が本来やりたいことは

auto a = e();

じゃなくて、

auto& a = e();

じゃないのか?
27デフォルトの名無しさん:2012/08/26(日) 22:14:04.26
C#のenumeratorのが便利だよな
なんでiteratorにしちゃったの標準のアホども
28デフォルトの名無しさん:2012/08/26(日) 22:21:19.55
// コンストラクタ
CTest::CTest(int num) : m_num(num)
{
}
↑”:”を付けて右にm_num(num)と書いてあるんですが、これなんという書式名?
ぐぐって調べたいが検索キーワードがわからん
29デフォルトの名無しさん:2012/08/26(日) 22:22:07.72
>>28
initializer_list
30デフォルトの名無しさん:2012/08/26(日) 22:55:33.72
>>27
サイズ増えるのがイヤだったんじゃね
31デフォルトの名無しさん:2012/08/26(日) 23:01:45.58
>>30
増えなくね?
例えばvectorなら始点終点のポインタで普通は4*2=8
vectorに対するenumeratorを実装するとしたら
コンテナへのポインタ+現在位置へのポインタで4*2=8
あるいは始点終点へのポインタで同じく4*2=8
分離してるかしてないかってだけで実用上では同じサイズでしょ
32デフォルトの名無しさん:2012/08/27(月) 00:00:53.37
より包括的なrangeコンセプトがある
33デフォルトの名無しさん:2012/08/27(月) 11:51:22.26
rangeはめんどくさい
自作するときにかなりだるい
enumeratorの実装は簡単だったなぁ
34デフォルトの名無しさん:2012/08/27(月) 16:08:36.99
>>29
わざとか? それとも真性アフォ?
35デフォルトの名無しさん:2012/08/27(月) 18:33:18.26
>>34
やっぱりかw
ぐぐっても出てこないはずだ
で、正解は?
36デフォルトの名無しさん:2012/08/27(月) 18:40:30.75
37デフォルトの名無しさん:2012/08/27(月) 18:46:50.29
member initializer list
38デフォルトの名無しさん:2012/08/27(月) 23:18:32.91
初期化子リスト
39デフォルトの名無しさん:2012/08/28(火) 02:26:34.66
自作のコンテナやイテレーター、アロケーター、ファンクタなどを作る時のガイドラインってどっかにないですか?
STLが期待してるクラス内のtypedefとかメンバ関数とか制約をきっちり理解したいです
40デフォルトの名無しさん:2012/08/28(火) 02:49:23.57
41デフォルトの名無しさん:2012/08/28(火) 09:58:43.87
>>40
規格書のほうは有料(?)っぽいのでとりあえずリファレンス読んでみます。どうもでした
42デフォルトの名無しさん:2012/08/28(火) 20:48:19.67
輪廻のラグランジュ
があるんだから
輪廻のStroustrup
もあっていいと思う
43デフォルトの名無しさん:2012/08/28(火) 21:12:14.19
規格書のハッシュありますか?
44デフォルトの名無しさん:2012/08/28(火) 21:45:49.67
随分難解なポエムをお求めですね
45デフォルトの名無しさん:2012/08/29(水) 00:36:28.06
これって駄目なんだね
なんかハマって脱力した

struct Base
{
protected:
  void Function(){}
};

struct Derived : Base
{
  Derived(Base *b)
  {
    Base::Function();  // OK
    b->Function();  // NG
  }
};
46デフォルトの名無しさん:2012/08/29(水) 00:56:36.24
bは他人なんだから触れないに決まってる
47デフォルトの名無しさん:2012/08/29(水) 01:03:21.50
>>45
割愛したコードに究極の馬鹿が隠れていそうだな
48デフォルトの名無しさん:2012/08/29(水) 01:19:23.86
多分、組んだ奴的にはProtectedで継承したFunction()が動くと思ってたんだろうな
実際には継承した方を完全スルーして引数で受け取った方を動かそうとするから・・・(ノ∀`)
49デフォルトの名無しさん:2012/08/29(水) 02:03:01.45
protected は中途半端。制御としては中途半端。
「見えちゃ嫌だけどちょっとは見えたほうが」
そんなの微妙すぎ。
50デフォルトの名無しさん:2012/08/29(水) 02:07:19.78
でもこれはいいんだろ?
糞が氏++ね

struct Derived : Base
 {
   Derived(Base *b)
   {
     Base::Function();  // OK
     b->Function();  // NG
     static_cast<Derived*>(b)->Function();  // OK
   }
 };
51デフォルトの名無しさん:2012/08/29(水) 02:15:32.03
>>49
おっぱいうらない
52デフォルトの名無しさん:2012/08/29(水) 02:20:02.67
>>50
無理キャストを通すやつが悪いに決まってる。
53デフォルトの名無しさん:2012/08/29(水) 05:30:30.76
ふーん
54デフォルトの名無しさん:2012/08/29(水) 09:06:53.06
>>50
dynamic_cast でないと危険だろ
55デフォルトの名無しさん:2012/08/29(水) 10:03:22.12
>>49
チラリズムだよ言わせんな恥ずかしい
56デフォルトの名無しさん:2012/08/29(水) 12:05:46.80
>>49
friend好きは卑屈過ぎます 自分に自信がない証拠です
名前空間は決して怖くなーい 勇気を持ってください
57デフォルトの名無しさん:2012/08/29(水) 12:23:31.94
C++だけの話じゃないんでここで聞いていいかわからないんですけど
メンバ関数ってなんでわざわざ
struct Obj {
void Method(void);
};
Obj obj;
obj.Method();
っていうふうにドットつけて書くんですかね?
struct Obj {
void Method(Obj & obj);
};
Obj obj;
Method(obj);
みたいな仕様ではダメな理由でもあったんでしょうか?

58デフォルトの名無しさん:2012/08/29(水) 12:34:20.98
>>57
禿本には両者がほとんど同じと書いてある
おまえさんのご希望は ADL がかなえてくれるかも知れない
59デフォルトの名無しさん:2012/08/29(水) 12:46:20.86
>>57
なんだか後者だと「クラスが引数な関数」っぽい……
60デフォルトの名無しさん:2012/08/29(水) 13:33:23.61
>>57
わざわざ?
メンバー関数に同じ引数をわざわざ繰り返し書くよりもドット1文字で済む方が楽に決まってるじゃん
61デフォルトの名無しさん:2012/08/29(水) 14:03:34.49
>>60
は?
62デフォルトの名無しさん:2012/08/29(水) 14:05:49.31
C++/CLIについて質問です。

C++からC++/CLIのクラスライブラリ(dll)を使うことは可能なのでしょうか?

63デフォルトの名無しさん:2012/08/29(水) 14:13:46.94
c++ではまず無理です
64デフォルトの名無しさん:2012/08/29(水) 14:23:52.13
む、、、無理なんですか・・・orz

困った...
65デフォルトの名無しさん:2012/08/29(水) 14:26:17.99
>>59
同感
まぎらわしいよな
66デフォルトの名無しさん:2012/08/29(水) 15:37:27.56
>>57
主語述語が逆転したみたいだな
唐突に出てくるメソッドが正体不明で気持ち悪い
67デフォルトの名無しさん:2012/08/29(水) 15:53:06.44
そこまで嫌わんでも
68デフォルトの名無しさん:2012/08/29(水) 16:06:21.01
関数ポインタとメンバ関数ポインタで区別しなくていいから関数スタイルのがクール
69デフォルトの名無しさん:2012/08/29(水) 18:04:30.96
メンバ関数ポインタを使う時点でクールじゃない
70デフォルトの名無しさん:2012/08/29(水) 18:31:34.31
メンバー関数ポインター型はきもい
71デフォルトの名無しさん:2012/08/29(水) 18:41:18.74
禿も間違えるんだよ
「ほとんど同じ」とか言いながら
virtual と多重継承でぷーくすくす
72デフォルトの名無しさん:2012/08/29(水) 19:30:48.03
yeild return便利やなぁC#最高
C++も少しは見習えよって思うよね
73デフォルトの名無しさん:2012/08/29(水) 23:43:39.95
>>62
お前みたいなバカがやると盛大にメモリリークするから辞めておけ。
74デフォルトの名無しさん:2012/08/30(木) 00:33:04.20
vectorにstringを200万行程度入れるのは問題無いのにclearする時にフリーズしたかと思うほど遅くなるような現象に遭遇した人はいますか?
75デフォルトの名無しさん:2012/08/30(木) 00:35:59.70
はい
76デフォルトの名無しさん:2012/08/30(木) 00:42:00.58
解決方法などわかった教えてください。原因がさっぱり想像できない状況です。
77デフォルトの名無しさん:2012/08/30(木) 00:45:28.12
嫌です。
78デフォルトの名無しさん:2012/08/30(木) 00:50:21.36
DBにツッコンドケ
79デフォルトの名無しさん:2012/08/30(木) 01:08:04.94
そりゃ200万回メモリ開放するんだから重いに決まってんだろ・・・
80デフォルトの名無しさん:2012/08/30(木) 01:43:02.72
一気に開放する良い方法ってないんですか?
81デフォルトの名無しさん:2012/08/30(木) 01:51:36.46
プールから使うように仕込む
82デフォルトの名無しさん:2012/08/30(木) 07:37:53.75
固定長にして std::vector<char> にする
83デフォルトの名無しさん:2012/08/30(木) 08:02:12.42
固定長にするならarrayのほうがよくない?
84デフォルトの名無しさん:2012/08/30(木) 08:53:04.30
>>82
バッファを一箇所にしてnull文字とかをデリミタにして区切るってこと?
固定長にする理由は?
85デフォルトの名無しさん:2012/08/30(木) 08:55:10.42
>>83
その場合、素直に実装すると
バッファ長に対する実使用量をみるのに毎回ループかけることになる
86デフォルトの名無しさん:2012/08/30(木) 10:32:45.28
>>74
入れるときよりclearのほうが時間掛かるってこと?
それぞれ計測してみた?環境は?
87デフォルトの名無しさん:2012/08/30(木) 10:44:37.97
カスタムアロケータ使えよ
1MB程度のブロック単位でmallocして、それを切り分ければ
まとめて解放出来るだろ
88デフォルトの名無しさん:2012/08/30(木) 11:04:10.11
皆様、色々アドバイスありがとうございます。

>>86
reserveして入れていますが、入れるときは30秒程度、clear時は10分以上かかります。
環境はWindows Vista SP2 Visual Studio 2010 SP1 です。

簡単にstring使ってましたが、そもそもstringを使うこと自体がこの規模だと厳しいのですかね?
89デフォルトの名無しさん:2012/08/30(木) 11:24:37.24
90デフォルトの名無しさん:2012/08/30(木) 11:27:33.46
91デフォルトの名無しさん:2012/08/30(木) 12:21:47.35
VS2008だけど1秒もかからん
92デフォルトの名無しさん:2012/08/30(木) 12:30:30.10
>>88
デバッガの上で動かすならせめて _NO_DEBUG_HEAP を設定してから測れ
デバッグ状態だとLFHとかの高速アロケータOffになんだよ
93デフォルトの名無しさん:2012/08/30(木) 13:32:24.51
>>92
_NO_DEBUG_HEAP=1で瞬時に解放できるようになりました。
ありがとうございました。
94デフォルトの名無しさん:2012/08/30(木) 13:48:06.52
アクセサなど、1行メソッドが大量にあるクラスを書くのですが、
そういうロジックって、ヘッダファイルに書く?それともcppに書く?
95デフォルトの名無しさん:2012/08/30(木) 14:07:37.25
短くてinlineでよくて変更があまり無さそうなのは基本的にヘッダに実装書いてる
96デフォルトの名無しさん:2012/08/30(木) 17:19:27.27
struct IHoge {
virtual void Func() = 0;
};

struct IFuga {
virtual IHoge GetHoge(void) = 0;
};

インターフェースを返すメンバ関数を持ったインターフェースを作りたいんですがうまくいきません
なにかいい解決法はないでしょうか
97デフォルトの名無しさん:2012/08/30(木) 17:40:44.81
ポインタで返す
98デフォルトの名無しさん:2012/08/30(木) 19:36:04.94
>>83>>84
ちがうちがう
各文字列を固定長にするだけ
文字列の個数は可変長
99デフォルトの名無しさん:2012/08/30(木) 20:17:32.56
>>96
お前頭おかしいんじゃね?
何がHogeだよ。
お前みたいなキチガイにプログラム組んでもらわなくても誰も困らないからさっさと消えろ。
100デフォルトの名無しさん:2012/08/30(木) 20:27:24.59
>>99
HogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHageHogeHogeHogeHoge
HogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHogeHoge
101デフォルトの名無しさん:2012/08/30(木) 20:36:04.66
>>96
hoge使っても異常だって気付かないんでしょ?
だから自分のコードの異常にも気付かない

お前本当にゴミだな
102デフォルトの名無しさん:2012/08/30(木) 20:50:22.08
C++の規格書って更新どれぐらいの頻度であるんですか?
今はC++11となってるみたいなんですがこれもう買っちゃっていいんですかね?
103デフォルトの名無しさん:2012/08/30(木) 20:51:28.39
またhogeに憎悪を抱くキチが湧いてるのか
104デフォルトの名無しさん:2012/08/30(木) 20:51:28.33
>>96=本物のヴァカ

そりゃまともなコードも書けないだろ

親がDQNだと>>96みたいなヴァカが生まれる

世の中に直接的に迷惑をかけるのは>>96だけど

原因は>>96の親

>>96の親は世の中にとって産廃並の不要物
105デフォルトの名無しさん:2012/08/30(木) 20:56:02.94
99=101=104はhogeが原因で家族が死んだりしたんだろうな・・・
同情するわ。
106デフォルトの名無しさん:2012/08/30(木) 21:02:23.18
>>96=キチガイ君。
107デフォルトの名無しさん:2012/08/30(木) 21:12:56.72
クロスキャストがしたいだけか
108デフォルトの名無しさん:2012/08/30(木) 21:14:50.32
>>102
ISO標準の承認(C++11)まで行ったから買っちゃっていいよ
109デフォルトの名無しさん:2012/08/30(木) 23:51:06.14
webで修正版の規格がタダで公開されてるが
110デフォルトの名無しさん:2012/08/30(木) 23:52:54.21
>>109
どれ?
111デフォルトの名無しさん:2012/08/31(金) 01:25:51.12
>>98
本当に何がしたいのかわからんわ...
112デフォルトの名無しさん:2012/08/31(金) 01:57:03.73
>>110
まあ、これとか?
https://github.com/cplusplus/draft/
113デフォルトの名無しさん:2012/08/31(金) 02:03:05.22
>>112
urlとタイトルに目を通したか?
114デフォルトの名無しさん:2012/08/31(金) 06:46:27.56
またhoge厨が沸いてたのか
キモすぎ
115デフォルトの名無しさん:2012/08/31(金) 06:50:44.18
N3337は正式規格後のドラフトで、違いは誤字や記述の修正だけ。
N3338で変更点が列挙されている。
116デフォルトの名無しさん:2012/08/31(金) 07:42:13.77
hoge

Hなオージー
117デフォルトの名無しさん:2012/08/31(金) 11:20:23.46
HでOGEレツ
118デフォルトの名無しさん:2012/08/31(金) 11:25:29.21
N3337とN3338を読めばおkってことですか?
正式版って買う価値なしってことですかね
119デフォルトの名無しさん:2012/08/31(金) 19:24:40.05
誰が読むんだかわからないJISは今回の改定大変だな
割に合わないし廃止になったりしないんだろうか
120デフォルトの名無しさん:2012/08/31(金) 20:14:31.95
翻訳やりたいやつ大勢いるだろ
狭き門で募集かければ総額バカ安でできるぞ
121デフォルトの名無しさん:2012/09/01(土) 01:42:04.08
>>120
品質重視に決まってるから「一応」業者に依頼すんじゃね、知らないけど
122デフォルトの名無しさん:2012/09/01(土) 04:54:34.77
データメンバa, bを有する自作クラスFooをストリームに出力するために
 std::ostream& operator<<(std::ostream& stream, const Foo& obj)
を定義したとして、その中で
 stream << obj.a << obj.b;
と書いたとき、下記のsetw()の効き方はどうなるのが正しいのよさ?
 Foo obj;
 std::cout << setw(16) << obj;
VC++ 2008だと、obj.aの出力のみにかかっているような気がしてならないんですが、
std::ostringstream等で一つの文字列にまとめる以外の回避策はありますか
123デフォルトの名無しさん:2012/09/01(土) 06:09:56.23
JISって普及させなきゃ意味ないのに
今時PDFがスキャン画像
124デフォルトの名無しさん:2012/09/01(土) 08:48:44.97
検索はできるぞ。
OCR付きで自炊したPDFみたいな感じ。
125デフォルトの名無しさん:2012/09/01(土) 10:15:25.18
>>122
自己解決しますた、
obj.aとobj.bの表示幅がそれぞれwa, wbとして事前に与えられる(固定長等)として、
これでおk
 int w = stream.width; // (1)
 stream << setw(w - (wa + wb)) << obj.a << obj.b; // (2)

さもなくば、std::ostringstreamを使わざるを得ない:
 std::ostringstream ost;
 ost << obj.a << obj.b;
 stream << ost.str();
ユーザー定義型変換等でobj.a, obj.bがstd::stringに変換可能なら、std::stringの連結でも可

ストリームの用途からして、(1)と(2)の間に他スレッドがstreamに出力するケースは
考えなくて良いよね
126デフォルトの名無しさん:2012/09/01(土) 14:33:58.09
>>57
Cの構造体に書式あわせただけだろ
127デフォルトの名無しさん:2012/09/01(土) 17:15:43.93
OO特有の第一引数マンセーじゃない?
128デフォルトの名無しさん:2012/09/01(土) 18:48:12.05
テンプレートにお詳しい方に伺います。
メンバ変数のオフセット値を取り出す際、現状以下のような関数を定義して取得しているのですが、
この変換を静的に解決してテンプレート引数として使いたいのです。
どうすればいいでしょうか

template<typename U,typename Class>
unsigned int offset( U Class::*address32 )
{
union
{
U Class::*pointer;
unsigned int t;
}imp;
imp.pointer = address32;
return imp.t;
};
129デフォルトの名無しさん:2012/09/01(土) 18:59:18.37
素直に offsetof 使ったら?
130デフォルトの名無しさん:2012/09/01(土) 19:29:18.65
>>129 ありがとうございます。
offsetofはインテリセンスとも相性悪いのがちょっと・・・
あと、考えてみたらオフセット値はテンプレート引数にはつかないですね。
すみません、質問閉じます。
131デフォルトの名無しさん:2012/09/01(土) 19:30:17.99
×つかない
○使えない
132デフォルトの名無しさん:2012/09/01(土) 23:24:16.57
C++でoffsetofは御法度だろ。
肛門にチンコを挿入するような演算子を使えよ。
133デフォルトの名無しさん:2012/09/01(土) 23:30:01.39
>>132
>肛門にチンコを挿入するような演算子を使えよ。

*← こんなのか?
134デフォルトの名無しさん:2012/09/02(日) 00:33:38.78
メンバ変数ポインタを使えという事か?
C用に定義された可変長構造体の
固定長部分のサイズを取得するのに
offsetofは使わなくもない
135デフォルトの名無しさん:2012/09/02(日) 10:02:36.15
ttp://ideone.com/WaqyD
このコードにおいて同じ文で生成されたオブジェクトは後に生成されたものから破棄されています
この動作はC++規格で決められている動作なのでしょうか もしそうであるならば規格のどこに記述がありますか
136デフォルトの名無しさん:2012/09/02(日) 11:07:18.67
>>135
12.2 Temporary objects
137デフォルトの名無しさん:2012/09/02(日) 11:59:08.95
C++ではリファレンスで束縛されない一時オブジェクトの解体は
完結式の評価の最終段階で行う (12.2p3)
c.f().f().f().f().f(); の終わりで解体
基本的に変数は生成された逆順で解体される(12.2p5,3.7.1-2,3.6.3,6.7)
かな?
138デフォルトの名無しさん:2012/09/02(日) 12:09:28.06
ふんふん
139デフォルトの名無しさん:2012/09/02(日) 12:41:01.25
>>136-137
ありがとうございます
140デフォルトの名無しさん:2012/09/02(日) 13:54:01.43
>>137
乗っかるようで申し訳ないけど、ふと疑問に思った事があります。
「リファレンスで束縛」のところなんだけど。
もしかして、関数の戻値で値返ししているような一時オブジェクトも、リファレンスで受け取れる仕様だったりする?

string getName() {return "moemoe";}

const string& s = getName();

もしかして、これ合法?
141デフォルトの名無しさん:2012/09/02(日) 14:18:56.50
ムブコンがいる
142デフォルトの名無しさん:2012/09/02(日) 14:32:35.15
>>140 const ならおk
143デフォルトの名無しさん:2012/09/02(日) 17:49:49.48
典型的なJava脳なのですがJavaでやってたことをC++に移植したいと思った場合、
これだけ覚えておけばいいよってことはなんですか?
どの入門書、解説ページ見てもストリームと演算子オーバーライドから始まって、
こんなん使わない、sprintfでいいやんとしか思えないのです。

やりたいこと等
・Javaで作ったSwingアプリをGDIアプリに移植したい。
・C言語の基本構文は知ってる、ポインタと修飾子はよく知らない
・GDIについては自分で調べる
・Javaのライブラリは三角関数(Math)のみ使用、文字列は使わない。
144デフォルトの名無しさん:2012/09/02(日) 17:54:17.12
>>143
>ポインタと修飾子はよく知らない
ここを改善すればよい

>GDIについては自分で調べる
Windowsベースなら、それはそれで茨の道だが、とりあえずポインタだ
145デフォルトの名無しさん:2012/09/02(日) 18:18:44.90
>>142
ありがとう。
知らなかった。
割りと避けてたかも。
これで安心して規格書漁れるよ。
有るか無いかすらわからない情報を探すのが、一番骨が折れるんだよね。
146デフォルトの名無しさん:2012/09/02(日) 21:56:10.39
>>144
まぁだいたい分かってると思うんですが、学習経験と実務経験がないから自信がないって感じですかね。

Javaは新入社員研修でIBMのネット教材を思いっきりやらされたから自信があるまでに理解できたけど
C/C++はテキスト見ながらだと危うく感じてしまいますね。
ま、理解できたつもりでやってみます。
147デフォルトの名無しさん:2012/09/02(日) 22:19:04.43
>ま、理解できたつもりでやってみます。

危うい・・
148デフォルトの名無しさん:2012/09/02(日) 22:25:54.93
g++4.6.3 で、constexpr を使いたいのですが、
main 関数内の f2 を constexpr にするとコンパイルが通りません。
何が問題なのか教えていただけないでしょうか。


#include <iostream>
#include <initializer_list>

struct Foo {
constexpr Foo() : p0(), p1() {}
constexpr Foo(std::initializer_list<int> list) : p0(*list.begin()), p1(*(list.begin()+1)) {}
constexpr Foo(const Foo& bb) : p0(bb.p0), p1(bb.p1) {}

int p0;
int p1;
};

constexpr Foo operator | (const Foo lhs, const Foo rhs) {
return Foo{lhs.p0 | rhs.p0, lhs.p1 | rhs.p1};
}

int main() {
constexpr Foo f0{1,2};
constexpr Foo f1{4,8};
const Foo f2(f0 | f1); // OK
// constexpr Foo f2(f0 | f1); // NG
std::cout << f2.p0 << std::endl;
std::cout << f2.p1 << std::endl;
}
149デフォルトの名無しさん:2012/09/02(日) 22:37:58.73
>>148 エラーメッセージ嫁。意味がわかんないなら貼れ。
150148:2012/09/02(日) 22:51:17.98
以下、f2 を constexpr にしたときのエラーメッセージです。

tmp.cpp: 関数 ‘int main()’ 内:
tmp.cpp:21:26: in constexpr expansion of ‘operator|(Foo, Foo)(Foo((* & f1)))’
tmp.cpp:21:26: in constexpr expansion of ‘Foo(std::initializer_list<int>(((const int*)(&{(((int)lhs.Foo::p0) | ((int)rhs.Foo::p0)), (((int)lhs.Foo::p1) | ((int)rhs.Foo::p1))})), 2ul))’
tmp.cpp:21:26: エラー: ‘(std::initializer_list<int>::const_iterator)(&{5, 10})’ is not a constant expression
151デフォルトの名無しさん:2012/09/02(日) 22:57:22.69
>>146
お、java やってて、後から c やったときの、まごついたところをレポよろしくです。
自分はc/c++やってて今java/c#に苦戦中
152デフォルトの名無しさん:2012/09/02(日) 23:31:10.81
>>148,150
std::initializer_list<T> の size() も begin() も end() も constexpr 宣言されてないからダメ。
18.9/1 ね。
153148:2012/09/04(火) 00:17:39.30
>>152
ありがとうございます。
そうなると、配列を含むクラスのコンストラクタを constexpr にするには他の方法を使わないといけませんね。
154デフォルトの名無しさん:2012/09/04(火) 04:09:38.27
>>153
std::array でいいんじゃないの?
155デフォルトの名無しさん:2012/09/04(火) 13:43:47.09
CopyFile関数でファイルを10個ほどコピーしています
すると10個のファイル転送が終わるまで処理が止まってしまいます。
コピーしろって命令だけ出した状態で直ぐに関数を終わりたいのですが
そのような関数はありますか?CopyFileExというのを見つけましたが
これはコピー中の経過が見えるだけで関数が待つという点で同じみたいです
出来れば別スレッドでコピーを実行とか難しいので非同期にコピーしてくれる関数がしりたいです
よろしくお願いします。

サンプルソース

for(i=0;i<10;i++)
{
CopyFile(src[i], dst[i]); //ここを非同期Copyにすり替えたい
}
156デフォルトの名無しさん:2012/09/04(火) 13:58:44.05
hoge.batファイルにcopyコマンド10個書き込んで
system("hoge.bat");ではいかんのか?
157デフォルトの名無しさん:2012/09/04(火) 14:01:16.30
>>156
hogeとか書いてる基地害はさっさと失せろ
お前マジで頭おかしいよ
自覚ないみたいだけど
158デフォルトの名無しさん:2012/09/04(火) 14:07:14.04
まーたhoge厨かw












hogeだってよwwwww
ヴァカじゃねwwwwwwwwwwwwwww
159デフォルトの名無しさん:2012/09/04(火) 14:14:09.23
出来ませんので別スレッドでやってください
160デフォルトの名無しさん:2012/09/04(火) 14:15:40.36
非同期コピーありそうでないんですね
素直に別スレッドでやることにします
161デフォルトの名無しさん:2012/09/04(火) 14:24:29.97
C++のスレでバッチファイルの話をする池沼>>156
Hoge使ってる奴の池沼率は異常に高い。
今回も例外ではなかった。
162デフォルトの名無しさん:2012/09/04(火) 14:32:34.94
具体的な対案示さずに批判とな?
163デフォルトの名無しさん:2012/09/04(火) 14:43:07.17
>>162
hoge使わなくてもcopyfileとかcopyasynchronousとかいくらでもあるだろ
思考停止してんのかこいつ
164デフォルトの名無しさん:2012/09/04(火) 14:44:43.16
ハッシュ関数って奴のオススメの関数教えてください。
165デフォルトの名無しさん:2012/09/04(火) 14:49:42.16
>>162,>>163
copyfileonbackgroundのほうがよくね?
166デフォルトの名無しさん:2012/09/04(火) 15:04:47.49
どうでもいいよ無能ども
167デフォルトの名無しさん:2012/09/04(火) 15:06:39.02
>>166=無能
168デフォルトの名無しさん:2012/09/04(火) 15:10:23.44
>>156
hoge厨キメぇ
169デフォルトの名無しさん:2012/09/04(火) 15:10:58.90
hogeを見ると発狂するアンタッチャブルが住み着いてることは分かった
170デフォルトの名無しさん:2012/09/04(火) 16:48:23.72
>>169
>アンタッチャブル
それってむしろスルー力高すぎる奴じゃね? TCG的に考えて
171デフォルトの名無しさん:2012/09/04(火) 16:52:38.65
またhogeに憎悪を抱くキチが湧いてるのか
172デフォルトの名無しさん:2012/09/04(火) 19:55:05.61
.NETではそれなりのファイルコピーが用意されてるっぽいね

ユーザーインターフェイスを表示するためにUIOption.AllDialogsを指定し(デフォルトでは表示されない)、
ユーザーがキャンセルしても例外(IOException)をスローしないようにUICancelOption.DoNothingを指定し(デフォルトでは、例外がスローされる)

//参照にMicrosoft.VisualBasic.dllが追加されている必要がある
Microsoft.VisualBasic.FileIO.FileSystem.CopyFile(
"C:\test.txt", "C:\test1.txt",
FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing);

ttp://dobon.net/vb/dotnet/file/filecopy.html
173デフォルトの名無しさん:2012/09/05(水) 01:00:28.74
>>172
此処はC++
174デフォルトの名無しさん:2012/09/05(水) 05:06:25.85
SHFileOperationはどうだろうか
ttp://www.crimson-systems.com/tips/t001r.htm
175デフォルトの名無しさん:2012/09/05(水) 09:28:53.38
>>174
これで試したら非同期コピーできたよ
簡単だし、途中でキャンセルできたり上書き確認もあったりで至れり尽くせり
176デフォルトの名無しさん:2012/09/05(水) 23:21:52.92
CreateProcessを用いてEXEファイルを実行し、EXEファイルの標準出力を取得したいと思っています。
以下のようにReadFileを使うと取得することはできますが、unicode対応
できません(リンクのbuf をwcharにすると文字化けしてしまう)。
http://www.usamimi.info/~hellfather/win32api/API_CreatePipe.xml

unicodeとして取得したい場合どのようにするのが一般的でしょうか?
177デフォルトの名無しさん:2012/09/05(水) 23:23:17.76
>>176
ですが、popenは使いません。
CreateProcessを使うやり方でお願いします。
よろしくお願い致します。
178デフォルトの名無しさん:2012/09/05(水) 23:28:03.37
>>177
CreateProcessはファイルアクセスには無関係だろ。
単にファイルをunicodeで読み出せばいい。
179デフォルトの名無しさん:2012/09/05(水) 23:42:40.65
>>178
え?
知りたいのはc++プログラムから外部のexeを実行して標準出力を取得する方法です。
ファイル開いて中身を読むのではありません。
180デフォルトの名無しさん:2012/09/06(木) 05:10:29.95
単純に考えて
1.外部exeをUnicode出力するようにする
2.一旦sjisで受け取り、mbtowc()などでUnicodeに変換する
181デフォルトの名無しさん:2012/09/06(木) 08:26:49.93
外部exeのUnicode出力は、自分のプログラム側でなんらかのメソッドを使うことにより可能になるのですか?イメージがわかないのでサンプルか参考ページかあると助かります。
182デフォルトの名無しさん:2012/09/06(木) 08:33:29.63
外部exeが自作でなければ1の方法は使えない
183デフォルトの名無しさん:2012/09/06(木) 08:43:29.13
2の方法は、一旦ReadFileでマルチバイトで受け取り、その後Unicodeに変換するということですよね?Unicodeに変換する際に情報が足りず文字化けするということはないですか?
184デフォルトの名無しさん:2012/09/06(木) 08:57:53.74
Unicode→sjisは変換不可能な文字はあるが
sjis→Unicodeは問題ないんじゃないかな。実際にやってみないと分からんけど
気をつけるのはsetlocale(LC_CTYPE, "")しとくくらいか
185デフォルトの名無しさん:2012/09/06(木) 09:43:42.68
GC以外に循環参照をうまく扱えるイディオムてないですか
複数のノードが無向グラフを組むように互いに参照しあっています
外部からどれか一つでも参照されるノードがあればグラフ全体が生きて
全てのノードが参照されなくなったら即メモリなどのリソースを開放しなければなりません
186デフォルトの名無しさん:2012/09/06(木) 10:27:59.62
weak_ptrは?
187デフォルトの名無しさん:2012/09/06(木) 10:38:49.97
>>186
いろいろ試しましたがうまくいきませんでした
188デフォルトの名無しさん:2012/09/06(木) 12:23:50.11
Windowsはワイド文字変換のAPIがあったよね
C++標準のとどう違うのかは知らないけど
189デフォルトの名無しさん:2012/09/06(木) 12:28:41.52
ロケーション
文字コード
ワイド文字

この辺の扱いが難しい
とくにロケーション
190デフォルトの名無しさん:2012/09/06(木) 15:29:07.85
>>185
循環参照関連で面倒なら、GCに頼った方がいいんじゃね

アプリ全体の言語変えるのがアレなら
割と高速なGC持ち言語を(Lua, V8/JavaScript)を
組み込んで使うのも手
191デフォルトの名無しさん:2012/09/06(木) 19:17:39.37
>>184
wave sign 問題とか minus sign 問題とか
192デフォルトの名無しさん:2012/09/06(木) 19:29:16.24
以下のコードでエラーが出て困っています。
http://codepad.org/IDIXMH8z

エラーの内容は以下の通りです。

1>Landform.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall GameObject::SetBody(class b2Body *)" (?SetBody@GameObject@@QAEXPAVb2Body@@@Z) が
関数 "public: __thiscall Landform::Landform(class b2Body *,struct b2Color const &)" (??0Landform@@QAE@PAVb2Body@@ABUb2Color@@@Z) で参照されました。
1>C:\workspace\C++\VC++\Practice\Debug\Practice.exe : fatal error LNK1120: 外部参照 1 が未解決です。

Box2D.hはhttp://box2d.org/のものですが、あまり関係ないような気がします。

こちらVC++2008、マルチバイト文字セット使用です。
vc++に強く関わる問題ならそちらのスレで聞きます。
193デフォルトの名無しさん:2012/09/06(木) 19:43:40.23
inline関数をcppで定義すな
194デフォルトの名無しさん:2012/09/06(木) 19:47:13.62
とりあえずinlineを外しましたがエラー内容は変わりませんでした。
195デフォルトの名無しさん:2012/09/06(木) 20:01:30.09
ツリーに使える再帰イテレータ ってどうやって
196デフォルトの名無しさん:2012/09/06(木) 20:11:19.27
>>192
ライブラリをリンクしてないだけじゃない?
197デフォルトの名無しさん:2012/09/06(木) 20:22:07.88
>>196
どのライブラリが必要なのでしょう?
Box2Dならstdafx.hに

#ifdef _DEBUG

#pragma comment(lib, "Box2D_d.lib")

#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")

#else

#pragma comment(lib,"Box2D.lib")

#pragma comment(linker, "/NODEFAULTLIB:MSVCRT.lib")

#endif

と記述し、stdafx.hは全てのファイルでインクルードする設定になっています。
GameObject.cppとLandform.cppなら静的ライブラリ化していません。
198デフォルトの名無しさん:2012/09/06(木) 20:28:55.06
197です。
stdafx.hの
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")
をコメントアウトした所リンクに成功しました。
お騒がせしました。
199デフォルトの名無しさん:2012/09/06(木) 22:10:09.52
可変長ビット配列を効率よく扱える純粋なC++用ライブラリは無いでしょうか。

無ければ自作しますが、今やってる作業はできるだけ中断したくないので、
できれば既存のライブラリを使いたいです。

求めている機能・性能は下記のものです(括弧内は例です)。

・2進数を表現した文字列による初期化(Bits bs("1011001001101"))
・インデックスによる1ビット単位の高速リードアクセス(if (bits[3] == 1) )

この2つが満たされれば、他の機能・性能は特に要りません。
初期化以降リードオンリーでも、リサイズが非効率でもかまいません。
200デフォルトの名無しさん:2012/09/06(木) 22:16:48.40
ブーストでええやん
201デフォルトの名無しさん:2012/09/07(金) 00:01:52.26
文字列からの変換は自作してstd::vector<bool>を注意深く使うとか
202デフォルトの名無しさん:2012/09/07(金) 00:07:45.14
>>199
標準では、無いから自作しな。
203デフォルトの名無しさん:2012/09/07(金) 00:08:48.24
>>199
boost::dynamic_bitset

これ以上の物を見た事がない
204デフォルトの名無しさん:2012/09/07(金) 00:10:11.59
libcのstd::tr2に入れられてるし次期標準になるのかもね
205デフォルトの名無しさん:2012/09/07(金) 00:40:59.77
んなくだらないサポートは要らんからはよLINQサポートしろや糞標準委員
206デフォルトの名無しさん:2012/09/07(金) 00:47:17.55
threadじゃだめなん(´・ω・`)
207デフォルトの名無しさん:2012/09/07(金) 00:49:59.72
threadは低レベル過ぎて使いにくいよ

http://d.hatena.ne.jp/fjnl/20111206/1323159773
208199:2012/09/07(金) 07:12:39.15
アドバイスや提案ありがとうございます。

用件を全て満たし、かつ使いやすそうだという事で、
>>203 の boost::dynamic_bitset を採用することにします。
209デフォルトの名無しさん:2012/09/07(金) 12:11:55.97
イテレーターカテゴリの話なんですけど
デリファレンスでコンテナの中身への参照をそのまま返すのではなく
なにか他の型のテンポラリオブジェクトを返すようなイテレーターって
ランダムアクセスできようがなんだろうがカテゴリはoutput_iteratorでいいんですか?

例えば
template <class Proxy> class MyIterator {
std::vector<MyClass>::iterator i_;
public:
Proxy operator * (void) const { return Proxy(*i_); }
// ry
};

std::vector<MyClass> vec;
MyIterator<Hoge> i = vec.begin(), j = vec.end();
while(i != j) {
*i = MyClass(); // コンパイルされるがテンポラリへの代入なので意味ない。あるいは型によってはコンパイルエラー
++i;
}


210209:2012/09/07(金) 12:15:20.22
すいませんoutputではなくinputに置き換えて読んでください
211デフォルトの名無しさん:2012/09/07(金) 13:37:15.76
const vectorのイテレータはconst random_access_iteratorだっけ
ランダム可能なら読み専でもrandom_access_iteratorでいいんじゃないの

こういう話もあるし
http://d.hatena.ne.jp/faith_and_brave/20100305/1267779325
>直交した2つの問題(横断と、値へのアクセス)を扱う場合、単一の階層構造しか持っていない
>標準のイテレータコンセプトとその要件には欠陥がある。
212デフォルトの名無しさん:2012/09/07(金) 17:43:25.84
int a = 1; と int a; a = 1; で意味が異なるのはどうすれば直せますか?
213デフォルトの名無しさん:2012/09/07(金) 17:45:15.86
int a(1);
214デフォルトの名無しさん:2012/09/07(金) 17:46:10.33
意味不明
215デフォルトの名無しさん:2012/09/07(金) 17:51:18.89
意味が異なるってどういうことだ?
216デフォルトの名無しさん:2012/09/07(金) 18:08:43.56
初期化と代入ってことじゃね
217デフォルトの名無しさん:2012/09/07(金) 18:11:53.21
>>211
なるほど
もしやと思ってたんですがやっぱり標準に問題があったんですね

218 ◆QZaw55cn4c :2012/09/07(金) 18:43:01.19
初期化と代入で究極的に生成コードに差異があるとでも?
意味論は読み手の問題では?
219デフォルトの名無しさん:2012/09/07(金) 18:51:47.80
最悪コンパイルエラーなるやろ
重要やで
220デフォルトの名無しさん:2012/09/07(金) 18:53:28.51
#define int MyIntClass
221デフォルトの名無しさん:2012/09/07(金) 19:46:12.05
>>218
可能性はある。
実装はともかく。
222デフォルトの名無しさん:2012/09/07(金) 19:50:33.71
>>221
kwskwktk
223デフォルトの名無しさん:2012/09/07(金) 20:15:10.30
VC++2010 でヘッダファイル作って適当にコード書いたら、
class という文字のところに波線が表示されて、次のエラーメッセージが出た。
(エラー一覧ウィンドウに警告ではなくエラーとして表示された)

「Intellisense: PCH 警告: ヘッダーの停止はマクロまたは #if ブロックには配置できません。
Intellisense PCH ファイルは生成されませんでした。」

後半の Intellisense PCH ってのはよく分からんけど、
たぶんそんなファイルは必要ないだろうから、どうでも良い。
(今まで使った記憶が無い)

ただ、前半のヘッダーの停止の意味がよく分からない。
ヘッダーの停止って何? 停止も何も、初めから動かないと思うが。
ヘッダーって内部的には、コンパイル時に #include <...> が
ヘッダーファイル内の文字列に置換されるだけなんじゃないの?

書いたコードは次のもの。

#ifndef TEST_H
#define TEST_H
class Container
{};
#endif

たったこれだけ。
224デフォルトの名無しさん:2012/09/07(金) 20:20:06.62
>>218
RAIIの意味が理解できないロートル乙
225デフォルトの名無しさん:2012/09/07(金) 20:39:04.55
>>209
Hogeとか使ってる精神異常は失せろ
ゴミが
226デフォルトの名無しさん:2012/09/07(金) 20:53:43.73
ゴミじゃないよ>>209はゴミ未満だよ
227デフォルトの名無しさん:2012/09/07(金) 21:01:21.37
>>223
インクルードしてる側のコードも晒して。
228デフォルトの名無しさん:2012/09/07(金) 21:02:10.44
C++にはガベージコレクションないからなあ
229デフォルトの名無しさん:2012/09/07(金) 21:25:14.90
自分の書いたコード以外で勝手に動かれると何か気持ち悪い…
230デフォルトの名無しさん:2012/09/07(金) 21:25:17.14
>>227
いや、まだどこにもインクルードされていない。

Win32 コンソールアプリのプロジェクトを新規作成して、
test.h ファイルを新規作成して、>>223 のコードを書いたらこうなった。
(正確に言えば、コードにはもう少し空行があるが、ここに載せるために縮めた)

ちなみに、#ifndef #endif のペアじゃなく、#pragma once を使ったら、
このエラーは発生しなかった。

じゃあ #pragma once でいいじゃんと言うことだが、納得いかない。
231デフォルトの名無しさん:2012/09/07(金) 21:39:43.73
>>229
デストラクタ否定派ですか?
232デフォルトの名無しさん:2012/09/07(金) 22:14:35.42
>>218
初期化と代入はいくら区別してもしすぎることはないんじゃわー
一般にaへのbの代入は初期化済みのaが存在するからこそ成立するし、
aが保持するリソースの適切な処置(開放等)を伴う

究極的には初期化が無ければプログラミングは成立しないが
代入は無くてもプログラミングが成立し得るという違いがある
233デフォルトの名無しさん:2012/09/07(金) 22:19:25.81
>>230
ヒント: stdafx.h
234デフォルトの名無しさん:2012/09/07(金) 22:24:42.82
>>233
私のプロジェクトには stdafx.h などというファイルは存在しないが、
stdafx.h を作れという意味?
235デフォルトの名無しさん:2012/09/07(金) 22:37:12.95
環境に依存しない言語仕様の問題の質問だと思うのですが、
ある関数が呼び出されたとき、その関数を呼び出したのが「誰」かによって
動作を変更することは可能でしょうか?
236デフォルトの名無しさん:2012/09/07(金) 22:38:42.28
呼び出した人を引数で渡せばイイよ
237デフォルトの名無しさん:2012/09/07(金) 22:40:58.78
なんか、セックスしたら逆に尿道異物挿入されたみたいで気持ち悪いなそれ・・・・・
238 ◆QZaw55cn4c :2012/09/07(金) 22:41:14.23
>>232
>代入は無くてもプログラミングが成立し得る
関数型の考え方ですね。いまちょっと苦闘中‥‥
239 ◆QZaw55cn4c :2012/09/07(金) 22:43:08.82
>>235
呼び出し先Aにしてほしいことをサブ関数にまとめて、そのサブ関数のポインタを呼び出し先Aに渡す、というのはよくみる光景かと。
240デフォルトの名無しさん:2012/09/07(金) 22:57:46.46
コールバックか

なる
241デフォルトの名無しさん:2012/09/07(金) 23:02:08.98
> 代入は無くてもプログラミングが成立し得る

メモリマップド I/O をどうやって成立させるんだよ
アセンブラに逃げるという答えは聞こえねえぞ

I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
代入の変形でしかない初期化だけで満足してるようならおめでたいぜ
242デフォルトの名無しさん:2012/09/07(金) 23:51:07.82
>>241
外界は移ろい行く世界であるから破壊的代入の世界なんじゃわー
したがって、I/Oまで非破壊的代入で通すことはとうぜん無理が大きい
しかしそんなことはプログラミングする上では瑣末な事柄であって
代入を含むアルゴリズムが皆初期化だけでも書けることが重要なんじゃわー

代入のかわりに初期化を使うと何がうれしいかと言うと、マルチスレッドがメチャ安全に実現できる
243デフォルトの名無しさん:2012/09/08(土) 00:00:54.31
言い忘れたがっていうか捕捉するが、
>I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
チューリングマシンはチューリングマシンを模倣する能力があり、
かつチューリングマシンとチャーチのモデルは等価なんじゃわー
したがってプログラミングする上ではどっちでもおk
外界やメモリや無限の長さの磁気テープが破壊的代入の産物であることは
事実ではあるが、漏れが初期化だけで満足することを全く妨げない
244デフォルトの名無しさん:2012/09/08(土) 00:02:01.18
TCB が初期化だけで書けるか?
operator new ですら初期化だけでは無理なのに
245デフォルトの名無しさん:2012/09/08(土) 00:03:52.83
>>17
一ヶ月ぶりに来たけど、まだあって安心した。
246デフォルトの名無しさん:2012/09/08(土) 00:21:47.79
テンプレート引数を特定のクラステンプレートに制限することはできますか?

例えば

template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };

これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。

つまり、

typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー

このようになってほしいです。
できるでしょうか。
247デフォルトの名無しさん:2012/09/08(土) 00:25:07.26
>>244
そんなことは知らんが(普通はTCBなしくみの上に非破壊代入のみの世界を作る・・・(1)
書こうと思えば書けるまずTCBはつまるところタスク間の同期管理のしくみである同期しなくて良いなら
単にシングルスレッドなプログラムがタスクの本数分、ということでタスクの初期化(生成)だけで済むことは自明

で、破壊的代入なプログラミングで書かれたタスクA、Bの同期というのはAとBの状態が揃ったとき
先に進むということに他ならない
そうした言語では1行1行の実行が無限長の磁気テープか有限状態制御部の状態遷移を伴うからである
これの非破壊代入版への単純な翻訳ではそれが全てタスクの部分に相当するプログラムの新規生成となる
生成に要する引数が揃わねば次のプログラムを生成できないのであるから、理論上そこで同期せざるを得ない
(まあ徹底的に非破壊代入にそろえるとこうなってしまい、マルチスレッドの概念からして覆ってしまう
 >242の最後の行はここまですることは意図していない(1)のケースにおけるメリットを述べたもの
248デフォルトの名無しさん:2012/09/08(土) 00:25:44.62
できるよ
249デフォルトの名無しさん:2012/09/08(土) 00:29:56.25
非破壊とは const のことか?
unko& unko::operator = (unko&&) const { return *this; }
250デフォルトの名無しさん:2012/09/08(土) 00:38:00.28
>>248
どのように記述すれば良いのでしょうか。
251デフォルトの名無しさん:2012/09/08(土) 00:47:15.31
>>250
質問に答えが返ってきてから後出し質問するなよゴミ
どんな教育受けてきだんだ
お前の親はマジで人間のクズだな
252デフォルトの名無しさん:2012/09/08(土) 00:55:39.60
>>251
クズ呼ばわりされては親に申し訳ないので新規に質問します。
>>246 は忘れてくださるとありがたいです。

テンプレート引数を特定のクラステンプレートに制限する方法が知りたいです。

例えば

template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };

これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。

つまり、

typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー

このようになってほしいです。
記述方法を教えていただけないでしょうか。
253デフォルトの名無しさん:2012/09/08(土) 01:02:42.87
自分に都合の悪いことは忘れろとか基地害?
254デフォルトの名無しさん:2012/09/08(土) 01:15:22.03
一般的には、テンプレート引数に制約を設けるには
コンセプトという機能(C++0xに入る予定でキャンセルされた)
がないと難しいような。
255デフォルトの名無しさん:2012/09/08(土) 01:51:43.01
>>252
template<typename T> IsClassA { static const bool value = false; };
template<int N> IsClassA<A<N> > { static const bool value = true; };
みたいなメタ関数を作ってBの中でstatic assertする。
256デフォルトの名無しさん:2012/09/08(土) 02:10:38.32
インスタンス化は防げるけど、型はとれちゃうんじゃ
257デフォルトの名無しさん:2012/09/08(土) 03:04:15.75
template<typename T, typename U=enable_if<IsClassA<T> >::type>
struct B {};
ならいけると思う
258デフォルトの名無しさん:2012/09/08(土) 07:28:37.76
>>235
c++的には多態を使う
259デフォルトの名無しさん:2012/09/08(土) 12:06:58.19
260デフォルトの名無しさん:2012/09/08(土) 16:03:30.03
#include <hoge.hpp>
261デフォルトの名無しさん:2012/09/08(土) 18:30:44.97
プリコンパイルヘッダーのおっさんはどうにかなったんだろうか
気になる・・・
262デフォルトの名無しさん:2012/09/08(土) 18:45:40.14
プリコンパイルヘッダーのおっさんって誰よ
263デフォルトの名無しさん:2012/09/08(土) 19:15:05.32
PCH云々のやつね
ヘッダだけコンパイルするとか、あまりやらないよな
264デフォルトの名無しさん:2012/09/08(土) 19:31:29.22
>>263
あぁ、俺のことか

ヘッダだけコンパイルなんてしてないよ。
VC++ 2010 はコンパイルしなくてもリアルタイムでエラーを見つけてくれる。

やった事は、VC++ を立ち上げてから >>230 だけ。
この状態で、class と書いた部分に下波線が引かれ、
エラー一覧ウィンドウにエラーが表示される。

ただ、エラーを無視してそのままいろいろコードを書き加えていくと、
いつの間にかエラーは消えている(どの状態でいつ消えるのか法則がよく分からん)。
そして、わざと書き加えたコードを消して >>223 のコードの状態に戻しても、
同じコード内容なのにもうこのエラーは出ない。

しかし、また別のヘッダファイルを新規作成して >>223 のようなコードを書くと、
そのファイルで同じエラーが出る。

ちなみに、警告では無くエラーとして出ているくせに、
エラーが出ているそのヘッダファイルをインクルードした cpp ファイルは、
何も問題なくコンパイルできる。
よって、目に見える実害は体験していないから、とりあえず無視して作業を続けてる。

しかしだ。
>>230 の操作だけでこのエラーが毎回出ることは確実で(いつの間にか消えるが)、
またエラーの内容も意味不明だから、気持ち悪いことこの上ない。
265デフォルトの名無しさん:2012/09/08(土) 19:33:31.83
c#からc++へのトランスレーターないですか?
266デフォルトの名無しさん:2012/09/08(土) 19:34:43.98
>>264
それIntelliSenseが解析できませんってエラーでしょ?
267デフォルトの名無しさん:2012/09/08(土) 20:03:54.90
>>266
そんな感じに読み取れるエラーメッセージだが、

「ヘッダーの停止はマクロまたは #if ブロックには配置できません。」

って何を指摘されているのか分からない。

ヘッダーの停止に関してできないことを俺がしようとしたために出たエラーであるなら、
ちゃんと理解して、できないことをしないようにしたいのだが・・・
268デフォルトの名無しさん:2012/09/08(土) 20:11:20.37
多分#endif書く前にインテリセンスが走ってエラー出力がされているだけだと思う
インテリセンスもバグが有ったりするから実際のコンパイルで何も言われなかったら気にしないのが吉
269デフォルトの名無しさん:2012/09/08(土) 20:17:48.91
アルゴリズムに、下の感じでクラスのメンバ関数を渡したいのですが、
staticメンバか関数オブジェクトしか渡せない(?)
mem_funみたいな便利な関数ありますか?

#include <algorithm>

class A {
bool positive(int x) { return x>0; }
public:
bool test() const {
int a[] = {3,2,4};
return std::all_of(a,a+3,positive);
}
};

int main()
{
A a;
a.test();
}
270デフォルトの名無しさん:2012/09/08(土) 20:32:10.84
std::all_of(std::begin(a), std::end(a), std::bind(&A::positive, this, std::placeholders::_1));
271デフォルトの名無しさん:2012/09/08(土) 21:00:08.40
ラムだ使えよ
272デフォルトの名無しさん:2012/09/08(土) 21:03:42.76
ラムダ使っても結局リフレクションしてるだけだし、
thatをいちいち参照させないといけないからダサい。
てかラムダ記法ダサいからなるべくつかいたくないw
273デフォルトの名無しさん:2012/09/08(土) 21:05:29.08
bindのが千倍ダサイわ
274デフォルトの名無しさん:2012/09/08(土) 21:06:39.36
>>270
ありがとう。知らない記法ばかりだ。
動的配列でもstd::end(a)とか定義されるのかしら・・・?
275デフォルトの名無しさん:2012/09/08(土) 21:07:48.87
>>273
まぁこれだといい勝負かもね。
276デフォルトの名無しさん:2012/09/08(土) 21:15:23.75
>>269
bind1stかbind2ndとthisを使っても出来るよ
277デフォルトの名無しさん:2012/09/08(土) 21:20:59.98
>>275
逆にラムダのが負けてるコードが見たい
278デフォルトの名無しさん:2012/09/08(土) 21:27:30.69
つmem_fun
279デフォルトの名無しさん:2012/09/08(土) 21:30:34.62
>>276
どちらもお亡くなりに・・・w
280デフォルトの名無しさん:2012/09/08(土) 21:34:08.96
誰だよmem_fnとか導入した奴w
名前かんがえろ!
281デフォルトの名無しさん:2012/09/08(土) 21:34:37.98
プリコンパイルヘッダーのインクルードは
#include <stdafx.h>
でなく
#include "stdafx.h"
と書く方がお行儀が宜しい
スケルトンもそうなってるし、<>だとカレントをすっとばして探される危険性がある
まあ /Yu "stdafx.h"というオプションがあるからカレントの"stdafx.h"を探してくれるから良いようなものの、
282252:2012/09/08(土) 21:37:44.15
アドバイスありがとうございます。

出された2つの案について、仕組みや長所短所などをこれから調べてみます。
283デフォルトの名無しさん:2012/09/09(日) 19:19:11.07
複数行をコンソールに更新表示(?)したいのですが、いい方法はないですか?
1行だけなら
printf("%d ¥r", num);
でできるのですが…
284デフォルトの名無しさん:2012/09/09(日) 19:21:47.13
system("cls");
285デフォルトの名無しさん:2012/09/09(日) 19:45:29.05
改行しまくってから












新しいの書くとイイよ
286デフォルトの名無しさん:2012/09/09(日) 19:59:05.85
ありがとうございます!!!
287デフォルトの名無しさん:2012/09/09(日) 20:06:36.65
>>285
何行改行すれば良いのかわかんないだろ
288デフォルトの名無しさん:2012/09/09(日) 21:13:00.32
>>283
Windowsのコマンドプロンプトで画面を消す方法
http://questionbox.jp.msn.com/qa2902820.html

ただし、Windows 7で動かすときちょっと手を加える必要があった
289デフォルトの名無しさん:2012/09/10(月) 02:29:29.15
質問者です。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1393771603
どなたか教えてください。
290デフォルトの名無しさん:2012/09/10(月) 07:17:20.38
ペロッ……これは新手のマルチ!
291デフォルトの名無しさん:2012/09/10(月) 07:29:30.36
まあここで答えろってわけじゃないんだし
マルチというわけでも・・・
292デフォルトの名無しさん:2012/09/10(月) 08:04:33.35
コピペせずに参照貼るのはプログラマとしてはあるべき姿
293デフォルトの名無しさん:2012/09/10(月) 12:39:38.76
>>292
こっちで答えを考えてるときに参照元で議論が進められると、
同期を取らなくちゃならなくなるし、こっちの思考がリセットされる可能性もある。

いくらC++と言えども、パフォーマンス問題が無い限り、
できるだけ参照透過性は意識してほしいところ。
294デフォルトの名無しさん:2012/09/10(月) 13:05:59.75
関数型でいこう
295片山博文MZボット ◆0lBZNi.Q7evd :2012/09/10(月) 13:08:28.94
>>290 青酸カリだったら死んでるよ。
296デフォルトの名無しさん:2012/09/10(月) 17:44:31.75
同期というか共有だけど、質問投稿サイト間で質問が共有されるのってあれ何?
ぱっと見マルチ投稿に見えるんだよね……
297デフォルトの名無しさん:2012/09/10(月) 20:26:02.04
>>296
OKWAVE
298デフォルトの名無しさん:2012/09/10(月) 20:59:53.20
ひとつ外のスコープとして変数を宣言できたりしますか?

{ ◯
{
int i;
}
}

で、◯のスコープとして i を宣言できると便利なときがあると思ったり。
299デフォルトの名無しさん:2012/09/10(月) 21:10:15.53
{
int i;
{
}
}
でいいだろ
300デフォルトの名無しさん:2012/09/10(月) 21:45:36.02
>>298
例えばどんな時?
ちょっと意図がわからないので、具体例を出してくれると嬉しい。

>>299
俺も真っ先にそう思った。
301デフォルトの名無しさん:2012/09/10(月) 22:28:53.80
なにもつかない{}を知らなかったんだろ
302デフォルトの名無しさん:2012/09/10(月) 23:08:35.33
>>301
馬鹿はダマッテロ
303デフォルトの名無しさん:2012/09/10(月) 23:10:27.23
>>302
それいっちゃうと君が黙らないといけなくなるよ?
304デフォルトの名無しさん:2012/09/11(火) 00:40:16.85
class A{
public:
A();
~A();
};

inline A::A()
{処理};
inline A::A()
{処理};
と記入するとinline AのAの部分が曖昧と扱われコンパイルされません
どのように解決すればよいのでしょう?
305デフォルトの名無しさん:2012/09/11(火) 00:41:12.09
class A{
public:
A();
~A();
};


inline A::A()
{処理};
inline A::~A()
{処理};

書き間違えました 正しくは上記の用にです
306デフォルトの名無しさん:2012/09/11(火) 00:58:25.31
inlineにしたいなら
class A{
public:
A(){処理}
~A(){処理}
};
ってしろよ
307デフォルトの名無しさん:2012/09/11(火) 01:04:50.94
>>306
確かにそのとおりなのですが、VC5ではコンパイルが通ってVC10では通らなくなった理由が知りたいのです。
308デフォルトの名無しさん:2012/09/11(火) 01:05:58.08
>>304,305
> と記入するとinline AのAの部分が曖昧と扱われコンパイルされません
どこが? ttp://ideone.com/2ITPP
309デフォルトの名無しさん:2012/09/11(火) 01:17:55.86
>>308
通りますね・・・

何か書き間違えてるみたいです・・・
出直してきます
310デフォルトの名無しさん:2012/09/11(火) 10:20:27.05
intってintのビット数が変わってもいいようにbitの長さは定義されてないじゃないですか。
でも、64bit用のコンパイラーはアドレスは64bitになりましたがintが32bitのままなんで
long longを使うのだと思いますがlong longはintより長いとしか定義されてないような気がしたので
将来的に128bitcpuが標準になったころにはコードを書き換えないといけなくなるじゃないですか?
だったらintもlong longもつかえないことになってどうしたらいぢえすか?
311デフォルトの名無しさん:2012/09/11(火) 10:43:30.47
ptrdiff_t
312デフォルトの名無しさん:2012/09/11(火) 11:06:08.85
それポインター用なんで
整数用ないですか?
コンパイラオプションでintの大きさ変えられないですか?
313デフォルトの名無しさん:2012/09/11(火) 11:19:55.89
アドレス扱うのに何でアドレス用の型使わないの?
314デフォルトの名無しさん:2012/09/11(火) 11:25:35.95
は?intは整数をあつかうものなんですけど?
315デフォルトの名無しさん:2012/09/11(火) 11:55:54.68
固定ビットの整数型が欲しかったら
std::int64_tとか使う
316デフォルトの名無しさん:2012/09/11(火) 12:03:35.69
>アドレスは64bitになりましたがintが32bitのままなんで
>long longを使うのだと思いますが

これがアドレスをlong longで扱うという意味でなく
単にアーキテクチャ幅と同サイズの整数型が欲しいということなら
typedefで自分で型用意すればいいんじゃないの

普通はそのままint使うけど
317デフォルトの名無しさん:2012/09/11(火) 12:16:11.03
>>312
ptrdiff_tは整数だが?
318デフォルトの名無しさん:2012/09/11(火) 12:20:16.08
typedef decltype((char *)0 - (char *)0) int_adoresu_t;
319デフォルトの名無しさん:2012/09/11(火) 13:03:58.20
intの長さは可変を前提にプログラムするのがあたりまえなんだけど、
なぜそれを守らなかった人のためにintを32bitにするんだろう。
これから先128bitが標準になってもintを32bitで貫くんだろうか。
そうなると大変なことがおこるだろうな。
320デフォルトの名無しさん:2012/09/11(火) 13:22:00.85
>守らなかった人のために
そんな理由じゃねぇよ
321デフォルトの名無しさん:2012/09/11(火) 13:37:05.47
むしろsizeof(int)==sizeof(void*)という
間違った前提を持ってた人の方が多そう
322デフォルトの名無しさん:2012/09/11(火) 13:38:10.39
だからptrdiff_t使えよ
これで何の問題があるんだよ
ほかにどんな選択肢があるんだよ
必要十分だろカス
323デフォルトの名無しさん:2012/09/11(火) 13:53:28.44
>>322
ポインターの長さっていうのはメモリーの容量と関係するわけだけど
CPUが128bitになったときに128bit必要な大容量のメモリーが
登場していなければ64bitのままの可能性もあるから、整数が
CPUのレジスタサイズに対応した可変の型があることが必要なんだよ。
324デフォルトの名無しさん:2012/09/11(火) 13:54:42.32
325デフォルトの名無しさん:2012/09/11(火) 14:02:43.23
上位32ビットが無駄なスペースって言うけど
使わなかったらもっと無駄なんじゃ、レジスタを二つにわけて並列演算
するとかしないかぎり。
326デフォルトの名無しさん:2012/09/11(火) 14:08:02.53
OSやコンパイラ作ってる連中にアドバイスしてきてやれよ
327デフォルトの名無しさん:2012/09/11(火) 15:43:03.50
任意二つの要素が一致しないn個の要素からなる集合を作りたいんですけど、
集合の要素はXbitの長さの整数であって
Xbitの整数はランダムな値を持つとすると
Xにはどんな数字をいれたらいいですか?
328デフォルトの名無しさん:2012/09/11(火) 17:03:02.17
32でいいんじゃない?
329デフォルトの名無しさん:2012/09/11(火) 17:54:02.68
>>327
え?
330デフォルトの名無しさん:2012/09/11(火) 21:01:44.97
ハッシュ関数を自前でつくる必要があるのですが、
std::unordered_set<std::pair<int,int>,Hash>
適当にHash(a,b)=a^bとかやってもパフォーマンスが悪いです。
どっかの教科書にはHash(a,b)=41*(a+41)+bがよいとか書いてるのですが、

次のような性質が分かっているときにうまいハッシュ値をつくれないでしょうか?
・ペアの要素型はintですが、非負整数が入ります。
・{a,b}が存在するときはほとんどの場合に{b,a}も要素にもちます。(つまりHash(a,b)!=Hash(b,a)としたい)
331デフォルトの名無しさん:2012/09/11(火) 21:06:32.25
ちなみに、一つ目の性質があるのでHash(a,b)=a-bとかはやってみましたが、やはり悪いです。
てかCSの専門じゃないのでハッシュの基礎的なことが分かってないです。
という意味でスレ違いかもしれないですが、まずはunordered_setにペア型をつっこむとき、
C++コミュニティ推奨の方法とかあれば教えてください。
332デフォルトの名無しさん:2012/09/11(火) 21:10:00.71
>>322
ポインタサイズの符号付整数型はstd::intptr_tであってstd::ptrdiff_tじゃねえよ
妙な使い方するなカス
333デフォルトの名無しさん:2012/09/11(火) 21:46:06.22
>>331
まずは値の分布調べろ
分布がないと話にならない
334デフォルトの名無しさん:2012/09/11(火) 21:55:26.32
>>333
いまクヌース読み始めたけど、その通りですね。
言語標準にしては使うのが難しい・・・。
335デフォルトの名無しさん:2012/09/11(火) 22:20:21.92
intのサイズはデータバス幅、
ボインタのサイズはアドレスバスの幅
これがそのアーキテクチャに対して一番最適な値
336デフォルトの名無しさん:2012/09/11(火) 22:23:40.51
>>323
メモリ空間はRAMだけのものじゃない
メモリサイズとポインタサイズは無関係
337デフォルトの名無しさん:2012/09/11(火) 22:31:16.94
メモリポインタ
338デフォルトの名無しさん:2012/09/11(火) 22:34:26.28
>>336
おまえはなしかみあってないようにみえる
339 ◆QZaw55cn4c :2012/09/12(水) 00:47:49.68
>>330
FNV Hash -- http://www.isthe.com/chongo/tech/comp/fnv/index.html
はどうでしょう?
340デフォルトの名無しさん:2012/09/12(水) 10:57:49.55
ぐぐったら sizeof(size_t) == sizeof(ptrdiff_t) < sizeof(char*) ってあり得るんだな
知らんかった
nearやfarを使ってた頃って色々面倒だったんだな
341デフォルトの名無しさん:2012/09/12(水) 11:35:05.60
C99のintptr_t/uintptr_tの実装って任意なのかよ
char*最強だな・・・
342デフォルトの名無しさん:2012/09/12(水) 11:37:40.52
で、アドレスを格納するのに十分な整数型は結局なんなの?
343デフォルトの名無しさん:2012/09/12(水) 11:43:34.30
intptr_t
用途によるけどintptr_t無かったらchar*でなんとかするしかないんじゃね?

http://viva2ch.net/tech/1201153965-800.html
>C89やintptr_t/uintptr_tの存在しないC99処理系では、
>一般にポインタ→整数→ポインタのラウンドトリップな変換をする方法はない。
>
>完全に蛇足だが付け加えると、size_tがポインタを格納できる大きさだという保証はない。
344デフォルトの名無しさん:2012/09/12(水) 12:09:13.97
なんのためのcppなのか
メタプログラミングで型を決めるとかあるだろ
345デフォルトの名無しさん:2012/09/12(水) 13:54:40.14
>>340
> ぐぐったら sizeof(size_t) == sizeof(ptrdiff_t) < sizeof(char*) ってあり得るんだな

実在しない
346デフォルトの名無しさん:2012/09/12(水) 13:55:17.98
typedef boost::int_t<sizeof(void*) * 8>::exact intptr_t;
347デフォルトの名無しさん:2012/09/12(水) 16:19:12.40
VisualStudio2012使えるようになったみたいだし
C++11の話題もこっちに入れていいのだろうか
348デフォルトの名無しさん:2012/09/12(水) 16:40:37.20
規格に沿った話なら別に問題ないのでは
349デフォルトの名無しさん:2012/09/12(水) 16:41:31.83
VSみたいなオモチャをまだ使ってるやついたの?
早くGCCに換えろよ。
350デフォルトの名無しさん:2012/09/12(水) 16:46:30.48
__gnu_parallel::for_each
ってVisualStudioで使えるの?
__gnu_parallel::for_each

そもそもWindowsではOpenMP使わない方がいいのか?
351デフォルトの名無しさん:2012/09/12(水) 17:44:13.91
>>350
VSでも使える。
352デフォルトの名無しさん:2012/09/12(水) 18:15:53.24
>>345
実在云々じゃなく言語仕様の話なんだけど
規格上でも有り得ないってことか?

一応、>>343の【初心者お断り】ガチ規格準拠C専用スレのレスや
http://stackoverflow.com/questions/1464174/size-t-vs-intptr-t
でポインタを格納出来る保証は無いとあったから
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf
を見たら、サイズやオフセットとかの相対値だけで絶対値としての用途に言及が無いから
連中の言う通り sizeof(char*) <= sizeof(size_t) の保証は無いと納得してたんだが
353デフォルトの名無しさん:2012/09/12(水) 18:19:38.23
>>344
はい
354デフォルトの名無しさん:2012/09/12(水) 18:23:24.43
VS2012はまともにC++11に対応してんの?
355デフォルトの名無しさん:2012/09/12(水) 18:51:07.82
>>338
あんたが話についていけてないだけしゃないの?
356デフォルトの名無しさん:2012/09/12(水) 20:29:02.16
>>352
規格のミスだ
故意に悪化を狙わない限りそういう実装は作れない
357デフォルトの名無しさん:2012/09/12(水) 20:31:16.34
>>352
sizeof(size_t) < sizeof(char*)
こんな実装は作成不可能。
規格でそれを許容しても気にしなくていい。
358デフォルトの名無しさん:2012/09/12(水) 20:35:08.37
>>354
残念ながら、とってもお寒い感じだな。
CXとかAMPとか、言語拡張のほうに力が入ってるような。

ただ、.NET出始めの頃にC++だけ置いてけぼり食らった歴史もあることだし、
開発力をどう割り振るかは非常に悩ましかったろうな、とは思う。
359デフォルトの名無しさん:2012/09/12(水) 20:46:29.68
>>356-357
これは?
http://bytes.com/topic/c/answers/735346-sizeof-size_t-sizeof-pointer
fact, typical DOS/Win16 implementations used to have a 16-bit 'size_t'
and 32-bit 'void*' pointers (depended on memory model).
360デフォルトの名無しさん:2012/09/12(水) 20:49:35.27
>>359
C++ちがうくね?
361デフォルトの名無しさん:2012/09/12(水) 20:59:51.50
>>360
こういうケースがCの実装ではあっても
C++の実装では作れないってこと?

C++しか使わないから
それが事実ならありがたいことではあるけど
362デフォルトの名無しさん:2012/09/12(水) 21:36:45.98
作成不可能だって主張する根拠を示してほしいよな
363 ◆QZaw55cn4c :2012/09/12(水) 22:32:26.67
>>362
>>359
1. スモールモデル以外は、size_t = 16bit よりも void * = 32bit の方が大きかった。
2. win3.1 と MSVC1.5=MSC/C++8.0 が同じくらい。
364デフォルトの名無しさん:2012/09/12(水) 22:57:49.80
struct int_ptr {
char * p;
int_ptr & operator += (const int_ptr &other);
・・・
};
みたいなのじゃいかんの?
365デフォルトの名無しさん:2012/09/12(水) 23:39:26.82
C++11準拠の実装は全てsizeof(void*)==sizeof(size_t)なんだがな
366デフォルトの名無しさん:2012/09/13(木) 04:43:53.85
規格の話をしている時に既存の実装の話をする阿呆
367デフォルトの名無しさん:2012/09/13(木) 07:24:20.41
まあDOS時代にはよくある事だった
組み込みではどうなんだろう?
368デフォルトの名無しさん:2012/09/13(木) 08:18:21.21
>>366
規格と実装は不可分特にC/C++のは後付けのなにものでも
369デフォルトの名無しさん:2012/09/13(木) 11:10:55.64
マルチスレッドでスレッドをどんどん増やしていくC++プログラミング手法を
インターネットのホームページでみかけたんですけど、
CPUのスレッド数までしかスレッドを作らない方がパフォーマンスよくないですか?
スレッド増やしすぎると切り替えるのにじかんかかりすぎますよね?
370デフォルトの名無しさん:2012/09/13(木) 12:33:59.47
>>369
その認識であってる
プロセス及びスレッド増やしすぎずに
非同期処理を正しく扱える方がスループットに優れる

が、OSのスケジューラの恩恵を得られないので
やり方によってはタイムシェアリングの品質に問題が出る

例えば2コア環境のサーバーアプリで
ユーザーA,BのためのIO待ちなどが発生しない処理を長時間続けると
ユーザーCの処理がずっと進まない
そのような場合、OSのスケジューラに頼らず自分で適切に処理をスイッチする必要がある

長文書いておいて何だけどC++とほぼ関係ない
371デフォルトの名無しさん:2012/09/13(木) 17:00:40.11
>>366
ここ十数年のC++の規格の話は全て実装の後追いですよ
372デフォルトの名無しさん:2012/09/13(木) 17:05:44.68
>>369
スイッチの無駄を減らす方がいいというのは、つまり少ない方がいい。
対CPU時間での効率を上げたければスレッドは少ないほどいい。
しかし待機してヒマしているコアが発生すれば資源の有効活用になっていない。
対実時間での効率を上げたければスレッドの数を増やせばいいが、その上限はコア数まで。
373デフォルトの名無しさん:2012/09/13(木) 23:41:38.33
GDIでプログラミングしてるのですが質問です。
ペンで線を引くのではなくウインドウの縦横指定のドットに色を設定すると言った処理はないでしょうか?
ググってもGDI自体のリファレンスも出てこなくて困ってます。GDI+ではないです。
374デフォルトの名無しさん:2012/09/13(木) 23:48:17.48
SetPixel
375デフォルトの名無しさん:2012/09/14(金) 00:21:04.35
セックスピストルズ?
376デフォルトの名無しさん:2012/09/14(金) 01:32:36.79
スタンドの方しか思い出せない
377デフォルトの名無しさん:2012/09/15(土) 02:45:43.07
>>374
ありがとうございます。
別のAPIでもsetPixelだからそういう名前じゃないかなと思ってました。
378デフォルトの名無しさん:2012/09/15(土) 03:05:54.43
ならggrks
379デフォルトの名無しさん:2012/09/15(土) 03:38:47.53
死ねカス
380デフォルトの名無しさん:2012/09/15(土) 07:14:23.68
もう来んなKS
381デフォルトの名無しさん:2012/09/15(土) 09:23:41.89
今時GDIって、
と思ったが、LinuxでもいまだにXlib叩くしな
382デフォルトの名無しさん:2012/09/15(土) 09:25:45.49
>>371
実験的に実装して、具合がよければ規格になる。
どんな言語でも同じだろ。

そもそも >>366 は、そういう話じゃないし。
383デフォルトの名無しさん:2012/09/15(土) 09:45:48.47
Hamigakiが
bjam install
だけで /usr/local
にinstallされるって書いてあるんだけど
/usr/local/include
にそれらしいものがない
何かコマンド間違ってる?
384デフォルトの名無しさん:2012/09/15(土) 10:32:45.32
なーに言ってんだこいつ
385デフォルトの名無しさん:2012/09/15(土) 10:43:55.57
bjamがないならインストールすればいいじゃない
386デフォルトの名無しさん:2012/09/15(土) 22:51:58.57
bjam-1_46
というのは入ってる
なので
Hamigakiを解凍したディレクトリに移動して
bjam-1_46 install
コマンドを実効したけど
インストールされてるようにみえない
387デフォルトの名無しさん:2012/09/16(日) 07:17:26.93
installスクリプトの中身読む知恵すらないのか猿
388デフォルトの名無しさん:2012/09/16(日) 10:41:06.54
>>386
ヴァカはパソコン触るな
触るなら自分で解決しろゴミ野郎
389デフォルトの名無しさん:2012/09/16(日) 11:19:47.52
ファイルのドラッグドロップで苦戦してます。
フォームにbuttan、listboxを配置しリストボックスに
ファイルを表示させるというものです。

#pragma endregion
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
        listBox1->AllowDrop = true;
}
private: System::Void listBox1_DragEnter(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e)
{
e->Effect = DragDropEffects::All;
}

private: System::Void listBox1_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e)
{
for each (String^ item in dynamic_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop)))
{
listBox1->Items->Add(item);
}
}

390デフォルトの名無しさん:2012/09/16(日) 11:38:29.21
C++で実装するプラグインシステムについてよくまとまってるサイトとか本おしえてくだしい!
391デフォルトの名無しさん:2012/09/16(日) 11:42:17.72
プラグインシステムなんてプラグインされる側で様々だと思う俺は、古い人間なのか…
392デフォルトの名無しさん:2012/09/16(日) 11:43:59.52
抽象度の高いアーキテクチャと、その実その一例が詳しく載っているサイト、
あるいは書籍を教えて欲しいのだと推測してみる。
393デフォルトの名無しさん:2012/09/16(日) 11:44:56.24
> その実その一例

その実装の一例
394デフォルトの名無しさん:2012/09/16(日) 11:45:38.64
データアクセスとイベント送受信のAPIを公開するだけ
395デフォルトの名無しさん:2012/09/16(日) 11:48:08.75
実現する機能も様々なのにアーキテクチャとか言い出す奴って…
396デフォルトの名無しさん:2012/09/16(日) 11:51:33.60
>>395
ごめん、もう言わない
397デフォルトの名無しさん:2012/09/16(日) 12:00:23.84
>>390
なかなか無いね。
ただ、実現の仕組みはそんなに難しくないよ。
バイナリレベルであれば、DLLの仕組みがプラグインそのもの。
ソースレベルや概念レベルであれば、GoF本の内容が役に立つかな。
おっと、デザパタの話を出すとヤツが来るかな。。。
398デフォルトの名無しさん:2012/09/16(日) 12:10:39.15
バカは黙ってればいいのに…
399デフォルトの名無しさん:2012/09/16(日) 12:11:56.41
>>398
しゃべるな
400デフォルトの名無しさん:2012/09/16(日) 13:13:23.29
簡単な例としては、set_new_handler だよな
この仕組みをバイナリ間で行えるようにしたのが dll や com だよね
ぶっちゃけ、プラグインの基本概念は、関数ポインタ
401デフォルトの名無しさん:2012/09/16(日) 13:18:54.64
アセンブラなら、
プログラムカウンタに設定する値をロードしたバイナリのテーブルから引くだけ

402デフォルトの名無しさん:2012/09/16(日) 13:18:58.00
そういう低レベルな話じゃなくて
プラグインとしてよい設計とはなにかみたいな話ではないの?
403デフォルトの名無しさん:2012/09/16(日) 13:19:53.92
GoFでも読んでろw
404デフォルトの名無しさん:2012/09/16(日) 13:45:25.06
>>397=>>399, >>403
GOF って言いたいだけだろ (w
405デフォルトの名無しさん:2012/09/16(日) 16:08:07.01
プラグインの設計ってインタフェースの設計そのものじゃね
406デフォルトの名無しさん:2012/09/16(日) 16:21:34.46
>>404
馬鹿GoFだ全部大文字で書くな意味をしらないのか馬鹿
407デフォルトの名無しさん:2012/09/16(日) 16:37:18.30
中身理解できない奴に限ってそういうところに妙に細かいんだよな (w
408デフォルトの名無しさん:2012/09/16(日) 16:37:19.01
>>390
とりあえずNPAPIでも参考に見てみたら?

http://en.wikipedia.org/wiki/NPAPI
>cross-platform plugin architecture

Chrome, Safari, Firefox, Operaなどが備える
共通プラグイン仕様
409デフォルトの名無しさん:2012/09/17(月) 02:22:43.69
「ひな壇は韓流タレント中心に」という構想が一変、TV界と韓流の今 09/16 13:00
http://woman.infoseek.co.jp/news/entertainment/cyzowoman_16Sep2012_25106


 日韓の関係悪化の影響により、韓流離れが加速する現在のテレビ業界。
しかし、2年ほど前には広告代理店を中心に「ゴールデンタイムの番組には韓国人タレントを使用する」流れが作られていたという。

現在は吉本興業所属の芸人が幅を利かせる“ひな壇タレント”を、そっくり韓流と入れ替えるという計画だったそうだ。

 日本国内で、KARAや少女時代がブレークした2010年。
日本音楽事業者協会会長で「尾木プロ」社長の尾木徹氏が、K-POPアーティストの誘致に尽力したと伝えられていた。
そして同時期頃から、広告代理店やテレビ局上層部の間では、こんな“定説”が存在していたという。

「2011年以降は、ゴールデンのバラエティから、吉本芸人はほとんどいなくなります。
代わりにひな壇に座るのがK-POPアーティストや、韓流タレントたち。

安定してレギュラー番組を続けられそうなのは明石家さんま、島田紳助、ダウンタウンくらいで、その他の芸人たちは有名無名問わず降板させていこうという方針でした」(広告代理店幹部)

 ところが3月の震災で、エンタメ業界は数カ月ほど停滞状態が続くことに。
その前後に日本デビューを果たしたK-POPアーティストや、バラエティに登場した韓流タレントも少なからず存在したが、テレビ出演者が大幅に入れ替わるといった事態に至ることはなかった。

「紳助は引退してしまったし、高岡蒼佑のフジテレビ韓流傾倒批判など想定外の事態はいくつも発生しました。
特にネット上でのフジテレビ批判は見過ごせるレベルの話ではなく、連日の抗議デモやスポンサー企業の不買運動など、韓流に対する不安要素ばかりが高まっていきました」(同)

 そして今回の竹島問題で、韓流コンテンツへの傾倒に関して沈黙を貫いてきたテレビ各局も、方針を表明。
フジテレビは当面韓流ドラマの放送予定はないとし、またBS日テレの定例会見では赤座弘一社長が「韓国ドラマが多すぎるのではという声もある。
少なすぎるという声はないので、今後、(韓流ドラマを)少なくしていく方向になると思う」と発言したことも話題になった。


410デフォルトの名無しさん:2012/09/18(火) 09:13:02.51
class ResourceHandle { /* ry */ };
ResourceHandle resourceHandle = spManager->GetResource("a.bin");
std::shared_ptr<???> spResourceHandle(resourceHandle, [spManager](resourceHandle) { spManager->ReleaseResource(resourceHandle); });

上のように生ポインタではなくポインタライクなインターフェースを持ったハンドルクラスをshared_ptrに渡したいのですが
shared_ptr<ResourceHandle> spResourceHandle(new ResourceHandle(spManager->GetResource("a.bin")),
[spManager](pResourceHandle) { spManager->ReleaseResource(*pResourceHandle); delete pResourceHandle; });
このように書くとnew/delete一回分増えるのが無駄になります

shared_ptrにResourceHandleをそのまま、あたかもポインタのように持たせるにはどのように記述すればいいんでしょうか
411デフォルトの名無しさん:2012/09/18(火) 09:30:40.07
無理
GetResourceがshared_ptr<ResourceHandle>を返すようにしろよ
412デフォルトの名無しさん:2012/09/18(火) 11:33:03.03
<<nはnが大きいほど処理時間がかかるのですか?
413デフォルトの名無しさん:2012/09/18(火) 11:40:05.86
いいえ
414デフォルトの名無しさん:2012/09/18(火) 11:48:12.72
operator << の中で、たとえば n の表示に再帰を使っているなら n が大きいほど時間がかかる
operator でない << も、シフト命令をマイクロプログラムのループで実装している CPU では n が大きいほど時間がかかる

シフト命令をバレルシフタで実装している CPU では n の値と処理時間は無関係
いずれにせよ n の値と処理時間が反比例したり負の比例定数を持つことはない
415デフォルトの名無しさん:2012/09/18(火) 11:51:49.97
じゃあIntel i5プロセッサーはどうですか?
416デフォルトの名無しさん:2012/09/18(火) 11:56:36.03
スレチ
417デフォルトの名無しさん:2012/09/18(火) 13:07:22.43
>>412
C++の場合、その演算の対象となる型によって答えが変わる。
対象が整数型の場合、>414の後半の通り。
今時のCPUなら、大抵同じ時間で処理できる。詳しいことは、該当CPUスレなどで。。

>>414
operator<<()が表示を担っているという前提はおかしい。std::ostream以外の可能性も考慮すべき。
418デフォルトの名無しさん:2012/09/18(火) 13:21:01.30
boostスレッドが死んでるのはC++11が便利過ぎてboostいらなくなったからとか
あるのだろうか
419デフォルトの名無しさん:2012/09/18(火) 13:55:18.69
>>417
たとえばつったじゃん

負数を考え落としたのはアフォだったけどw
420デフォルトの名無しさん:2012/09/18(火) 23:17:49.72
黒魔術つかった不思議に便利なライブラリよりも
XMLパーサとか普段の仕事で使える実用的で黒魔術的じゃないライブラリの充実を目指したほうがいい
boostは終わったコンテンツ
C#ライブラリのような方向を目指さないと未来がない
421デフォルトの名無しさん:2012/09/18(火) 23:27:57.88
なにをゆうてんのかわからん
422デフォルトの名無しさん:2012/09/18(火) 23:36:25.82
xmlパーサならあるだろ
423デフォルトの名無しさん:2012/09/18(火) 23:41:52.90
424デフォルトの名無しさん:2012/09/19(水) 00:21:08.66
たしかにテンプレートライブラリはもう十分すぎていらんな
425デフォルトの名無しさん:2012/09/19(水) 00:45:02.30
実用的で黒魔術的じゃないライブラリといえばprogress_display
426デフォルトの名無しさん:2012/09/19(水) 01:14:53.51
>>424
全然足りない、というか不備だらけ
あの大風呂敷の範囲内でだけど

concept さんには退学とまでの苛烈な仕打ちをしながら
不審者 GC には甘い顔というのは、原理主義者に言わせると唾棄すべきだし
テンプレートテンプレート引数君に気高く見守られているもう終わった老人

禿自身が atomic に及び腰で超問題児 volatile をどうにもできないし
社歌に起立しない者にもナメられっぱなし
427デフォルトの名無しさん:2012/09/19(水) 01:21:00.82

   ∧_,,∧   ♪マンドクセ   ∧_,,∧   ♪
  o(・ω・ `)o         o(´ ・ω・ )o
(( /     ( ))          (( )   ヽ ))  シャカシャカ
  し――J             し――J
428デフォルトの名無しさん:2012/09/19(水) 10:10:06.24
>>425
おいやめろ
429デフォルトの名無しさん:2012/09/19(水) 15:56:20.35
boostのソケット周りの実装がウンコ過ぎて泣ける
430デフォルトの名無しさん:2012/09/19(水) 16:21:54.31
テンプレート駆使するよりも
python使ってCのプログラムを自動生成したほうがよくないか
431デフォルトの名無しさん:2012/09/19(水) 19:10:37.01
std::stringのdata()に書き込んじゃダメ?

std::string s;
s.resize(10);
char *p = const_cast<char *>(s.data());
for ( i = 0 ; i < s.size() ; ++i ) p[i] = 'a';

こういうことやりたいんだけど
432デフォルトの名無しさん:2012/09/19(水) 19:42:47.75
>>430
デバッガのステップ実行ができん
(python のコードがステップ実行されないと意味ないからな)

まぁテンプレート駆使されると似たような状況かも知れんが、まだまし
433デフォルトの名無しさん:2012/09/19(水) 19:52:31.60
const_cast の前には掟なし
ついでに reinterpret_cast も使ってヒャッハー
434デフォルトの名無しさん:2012/09/19(水) 19:56:46.31
>>431
自己責任なら何でもあり。
それがC++
435431:2012/09/19(水) 21:09:04.89
書き込んで実際に使えたらいいけど
よく調べてみたらdata()には書き込めないらしい
stringをchar *のように扱えたらいいのに
436デフォルトの名無しさん:2012/09/19(水) 21:21:46.03
マジレスすると、
operator[]
を使えと。

あれ?
でも、メモリの連続性に vector と同じ保証ってあったっけ?
437デフォルトの名無しさん:2012/09/19(水) 21:26:16.95
C++11からOK
438デフォルトの名無しさん:2012/09/19(水) 21:41:31.55
>>431
わざわざconst修飾子を外して書き込むとは・・・
439デフォルトの名無しさん:2012/09/19(水) 22:22:26.27
s[i] = 'a'; でいいじゃない
440デフォルトの名無しさん:2012/09/19(水) 22:34:47.29
>>436
C++11から保証された
441デフォルトの名無しさん:2012/09/19(水) 22:38:46.42
C++11から大丈夫
442431:2012/09/19(水) 22:56:20.89
俺がやりたいのは、
char *の引数にstringを渡したいってことなんだよ
逆ならできるけど
イテレータ→ポインタは無理か
443デフォルトの名無しさん:2012/09/19(水) 23:00:15.04
>>440
ありがと。

と、言う事は単純に >>439 の方法でも良いし、
char* p = s[0];
でも良いわけだにゃ。
444433:2012/09/19(水) 23:02:05.00
間違えた。
char* p = &s[0];
だ。
445デフォルトの名無しさん:2012/09/19(水) 23:05:08.95
char *p = str.c_str();
で良くないの?
446433:2012/09/19(水) 23:05:54.65
>>442
それでもオケ。
但し、&(*iteratder) とするのが合法かな?
447デフォルトの名無しさん:2012/09/19(水) 23:18:14.91
>>444 >>446
すみません。
これは by>>433 ではなく by>>443 でした。
orz...
448デフォルトの名無しさん:2012/09/19(水) 23:21:13.89
>>445
2003 規格では const charT* です。
449デフォルトの名無しさん:2012/09/19(水) 23:23:29.54
11でもconst CharT*です
450デフォルトの名無しさん:2012/09/19(水) 23:30:28.10
C++03の場合はメモリの連続性が保証されてないから一旦char*にコピーしてから書き戻すのが良いと思う
451デフォルトの名無しさん:2012/09/19(水) 23:32:39.95
#define string vector
452デフォルトの名無しさん:2012/09/19(水) 23:38:55.39
>>451
いやそれではstring特有の豊富なメンバ関数が使えない
アルゴリズムを使って何とかしろというのか
453431:2012/09/19(水) 23:43:18.14
>>446
なんだかよくわからないけどできた
ありがとう
454デフォルトの名無しさん:2012/09/19(水) 23:47:47.94
レガシーにも使いやすい文字列クラス作ればいい
三時間もあれば十分だろ
455デフォルトの名無しさん:2012/09/20(木) 00:23:52.01
まあ標準文字列クラスは失敗作だと言われているからねえ
でも新しい文字列クラスを作る必要があるのだろうか?

エンバカみたいなUnicodeStringみたいなクラスなら意味はあるかもしれんけど
456デフォルトの名無しさん:2012/09/20(木) 07:36:53.68
>>450
実際連続じゃない実装なんて存在しないから
気にしなくてもいいと思うぞー
まあ、自己責任だけどな
457デフォルトの名無しさん:2012/09/20(木) 15:41:14.86
クラスでnewを使って
動的にインスタンス生成することの
メリットが分かりません
教えて下さい
458デフォルトの名無しさん:2012/09/20(木) 15:52:20.39
std::vectorやstd::stringを使ったことがありますか?
new(malloc)が無いとああいったものの実装もままなりません
459デフォルトの名無しさん:2012/09/20(木) 16:03:18.06
>>457
焦んなくていい
むしろ必要性を感じるまで使ってはならないものだ
460デフォルトの名無しさん:2012/09/20(木) 16:25:44.41
テキストファイルの各行の長さは、コンパイルするとき、わからないから、動的に対応する
461デフォルトの名無しさん:2012/09/20(木) 17:33:54.60
一度代入されたら変更されない変数はconstつけた方が高速になる?
462デフォルトの名無しさん:2012/09/20(木) 17:39:44.61
>>461
そうとも限らない
const付けても強制的に型キャストすればいくらでも変更可能だから内部表現は環境依存
ただし文中では意味が異なる
配列数に使えたり
463デフォルトの名無しさん:2012/09/20(木) 17:40:26.46
あれそう言えば強制的に値を替えて配列数に使った時はどちらの値が使われるんだろう?
464デフォルトの名無しさん:2012/09/20(木) 18:06:54.23
>>463
定数かconst変数かで異なる
http://ideone.com/2lAdl

前者の「定数にconst外し」はそもそも未定義だけど
465デフォルトの名無しさん:2012/09/20(木) 20:20:53.70
>>464
サンクス
こういう辺りが何か気持ち悪いんだよなあ
466デフォルトの名無しさん:2012/09/20(木) 22:04:21.18
>>464
な、なにが、ど、どうなんているの、ですか?
467デフォルトの名無しさん:2012/09/20(木) 22:37:43.51
後者の「配列宣言に変数」はそもそもGCC拡張だけど
468デフォルトの名無しさん:2012/09/20(木) 23:49:37.14
>>467
c99
469デフォルトの名無しさん:2012/09/21(金) 00:30:16.55
C++のスレだし>>464はどう見たってC++
C99でconstは定数にならないから前者のサンプルもおかしくなるな
470デフォルトの名無しさん:2012/09/21(金) 07:44:24.10
いやc99のフィードバックで可能になった処理系もある(c99有効化フラグ立てて初めて使えるコンパイラとか)
gccとms、Intelのコンパイラくらいしか使ったことないのかもしらんが
471デフォルトの名無しさん:2012/09/21(金) 07:48:23.51
たしかいつかのコードウォーリアにはそんな設定があった
472デフォルトの名無しさん:2012/09/21(金) 08:04:24.73
C++11がC互換部分でC99取り込むことになるから今後の処理系は色々捗るんだろな
473デフォルトの名無しさん:2012/09/21(金) 19:24:40.06
まあ環境依存スレじゃないから例として不適切だとは思うが
474デフォルトの名無しさん:2012/09/21(金) 22:47:01.73
for (int i = 0; i != hoge; ++i){
  for(int j = 0; i != fuga; ++j){
    ...
  }
}

iとjを間違えているバグ(i != fuga)を突き止めるのに小一時間かかった。
こういうミスを防ぐ、あるいは発見するコツってありますか?
475デフォルトの名無しさん:2012/09/21(金) 22:49:07.90
i j kではなくx y z やa b cのように見た目が似て居ない変数でループを回しなさい
476デフォルトの名無しさん:2012/09/21(金) 22:52:23.54
>>474
hogeキチガイはプログラムなんか組まなくていいから回線切って引きこもってろよ
477デフォルトの名無しさん:2012/09/21(金) 22:55:27.21
>>474
お前ゴミだな。

hogeは覚える暇があってもコーディングスキルを身に付ける暇はないんだな。

マジでゴミ。
478デフォルトの名無しさん:2012/09/21(金) 22:56:12.40
会社で何か嫌なことでもあったの?
479デフォルトの名無しさん:2012/09/21(金) 23:03:27.60
>>475
とてもシンプルですね。
確かにiとjが似ているせいで発見されにくかったと言えます。

>>476-477
hogeへの拘りにワラタ。
480デフォルトの名無しさん:2012/09/21(金) 23:07:34.06
>>479
低レベルな内容で詰まる癖にhogeとか使う余裕ないだろ
生活が苦しいのパチ屋につぎ込んで生活破綻するDQNと同じ思考回路
481デフォルトの名無しさん:2012/09/21(金) 23:09:01.41
エディタのフォントを変えてみるという手も・・・?
まあ視認性悪くなって効率悪くなりそうだけど
482デフォルトの名無しさん:2012/09/21(金) 23:09:44.71
会社なら>>479みたいな奴は窓際行きだよ。
ゴミと同じくらいな価値しかないもん。
483デフォルトの名無しさん:2012/09/21(金) 23:12:50.54
親がクズなんでしょ
まともに教育できない癖にガキ生んだのがこの結果

何を優先すべきかという判断力が全くない
だからつまらないミスで引っ掛かって赤の他人にきいてるんでしょ

親がクズだから>>479に罪はない
>>479も自覚はなさそうだし
484デフォルトの名無しさん:2012/09/21(金) 23:16:02.87
親がクズというより>>479は精神疾患系じゃないか?
485デフォルトの名無しさん:2012/09/21(金) 23:27:35.20
心理学の話できいたけど、できちゃった婚とかだと子供は望んで生んだわけじゃないから、法に触れない最低限の教育しかしないらしい。
だから、全員とは言わないけど、よく思考回路の狂ったガキが輩出される。

コーディングもままならないのにhogeとか使ってる頭のおかしな>>479もその可能性が高い。
誰にも望まれずに、親にすら望まれずに生まれてきたガキ。
当然社会にもいらない。
486デフォルトの名無しさん:2012/09/21(金) 23:31:24.59
いい大人が子供相手に叩きすぎw
お前らだって小さい頃にチンゲン菜の「チンゲ」とかに反応したことあるだろ?
子供のうちはそういうものに反応するんだよw
>>479も中学校に進学する頃にはまともになってるさ
487デフォルトの名無しさん:2012/09/21(金) 23:36:27.24
>>479
変数はbokuhagomidesuのほうがいいんじゃね?
そのほうがお似合いだぞ
488デフォルトの名無しさん:2012/09/21(金) 23:38:14.96
>>474
そういう糞みたいな間違いを防ぐ方法を教えてやる

「無能なPGは即クビ」

ソフトの品質保つにはこれが一番効く
489デフォルトの名無しさん:2012/09/21(金) 23:43:17.00
病人怖い
490デフォルトの名無しさん:2012/09/21(金) 23:43:24.93
hogeは良い文化だと思うけどね。
hogeを使ってるかどうかでまともかどうかある程度ざっくり判別できる。

hoge使ってるような奴はまともじゃないから当たり障りのないように適当に相手をしておけばよい。
491デフォルトの名無しさん:2012/09/21(金) 23:46:45.42
>>490
そうやって当たり障りなく相手にするから>>479みたいなキチガイがまともに相手してもらえてると思って調子に乗るんだろ
492デフォルトの名無しさん:2012/09/21(金) 23:49:23.88
for(int hoge = 0; hoge < 5; ++hoge)
for(int fuga = 0; fuga < hoge; ++fuga)

凄い!iとjを使う1024倍見やすい!hoge&fugaってすばらしい!
493デフォルトの名無しさん:2012/09/21(金) 23:58:37.24
hage
494デフォルトの名無しさん:2012/09/22(土) 00:10:44.66
>>479
ようゴミ野郎
495デフォルトの名無しさん:2012/09/22(土) 00:14:29.26
もう少しまじめに議論しないか
496デフォルトの名無しさん:2012/09/22(土) 00:21:24.31
outsideLoopCounterとでもすればいいのにhogeとか
マジモンの池沼か?
497デフォルトの名無しさん:2012/09/22(土) 00:22:59.91
>>495
hogeとか使ってる>>479に言え。
498デフォルトの名無しさん:2012/09/22(土) 00:24:07.44
議論せき止めてるアンチhoge厨いい加減にしろや
みんなマジで迷惑してんだけどなんで気付かないの?
499デフォルトの名無しさん:2012/09/22(土) 00:25:10.01
>>497
意味の無いアルファベットの並びなんか何だっていい

なぜそんなものに不快感を示すのか分からない
500デフォルトの名無しさん:2012/09/22(土) 00:26:58.07
hoge使うから議論が止まってんだろ
基地害>>479の自業自得w
501デフォルトの名無しさん:2012/09/22(土) 00:32:25.73
>>499
そうか?
お前クレジットカード申し込み書の記入例の名前欄にに「スーパーおまんこ天国 放射能ひろしDX」とか書いてあったら、この会社頭おかしいなって思わない?
記入例だから何でもいいけど、普通は「山田 太郎」とかにするだろ。
何でもいいとはいえ時と場合で限度がある。
「スーパーおまんこ天国 ひろしDX」に疑問を感じない>>499の神経にはびっくり。
502デフォルトの名無しさん:2012/09/22(土) 00:36:06.39
869 名前: デフォルトの名無しさん 投稿日: 2012/09/19(水) 08:04:53.77
亞汰魔がおかしい



927 名前: デフォルトの名無しさん [sage] 投稿日: 2012/09/20(木) 02:48:04.54
"亞汰魔"の検索結果、7件

どこぞのゲーマーのブログに引っかかる訳だが、恥かしくねーのかな?
本人か、影響されたバカか、それとも晒すためのワザと書いてるのか、
知らんけどさー



928 名前: デフォルトの名無しさん [sage] 投稿日: 2012/09/20(木) 02:58:47.68
亞太魔wwwwwwwww
hogeと同じレベルwwwwwwwwwwwwwwwwwwwwwwww
503デフォルトの名無しさん:2012/09/22(土) 00:38:48.70
>>501
「意味の無い」 「アルファベットの並び」 と言ったはずだ
504デフォルトの名無しさん:2012/09/22(土) 00:46:09.97
>>503
例だろ
そんなことも分からないの?
じゃぁスーパーおまんこなんたらやめて
「じゃびみょぱひるるきいぱ かぴよだばままさろゅぴ郎」に読み替えろ

hoge擁護派にもまともな香具師がいないなぁ
505デフォルトの名無しさん:2012/09/22(土) 00:47:16.69
>>501
この会社頭おかしいと思っても、
>>476 の様にその会社に暴言を吐くことは普通しないよな。
子どもじゃないんだから。

黙って、そのまま記入するか、作るカードの会社を変える。

あと、例があまりに非現実的だし、下品で笑えない。
もう少し現実にありそうな事を考えてくれよ。
506デフォルトの名無しさん:2012/09/22(土) 00:47:20.07
またhoge厨が湧いてんのか。





こうなることは目に見えてるから荒らすためにわざとhoge使ってるんだろ。
507デフォルトの名無しさん:2012/09/22(土) 00:49:11.64
>>505
まずhogeってのが非現実的で下品だから釣り合いは取れてんじゃね?
508デフォルトの名無しさん:2012/09/22(土) 00:56:08.32
hogeから下品な想像できる人なんてこの世にほとんどいないよ
無視して大丈夫なレベル
509デフォルトの名無しさん:2012/09/22(土) 01:00:44.19
>その会社に暴言を吐くことは普通しないよな。

2chだからいいだろ。

現実ではググレカスも言わないし、初対面の相手にタメ口をきくこともない。
510デフォルトの名無しさん:2012/09/22(土) 01:02:02.84
そもそも無意味な変数なんてあんの?
意味あるなら意味ある名前付けると思うけど
511デフォルトの名無しさん:2012/09/22(土) 01:06:14.26
>>510
例えば一時的なカウンタとして使用する i j k などは、
その「使われ方」からカウンタという意味を読み取るが、
「名前自体」からは意味を読み取ることはできない。
512デフォルトの名無しさん:2012/09/22(土) 01:07:29.24
>>501のような例を思いつく人間の思考が気持ち悪い
513デフォルトの名無しさん:2012/09/22(土) 01:08:20.31
2chってサイコーに面白いね
514デフォルトの名無しさん:2012/09/22(土) 01:08:30.52
>>509
良い悪いじゃなくて、単純にウザい
515デフォルトの名無しさん:2012/09/22(土) 01:09:56.86
使われ方で分かるならhogeじゃなくてijkxyzでいいだろw
516デフォルトの名無しさん:2012/09/22(土) 01:10:39.33
確かにhogeは単純にウザい面もあるね
517デフォルトの名無しさん:2012/09/22(土) 01:11:31.50
hogeって・・・



























馬鹿じゃねwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
518デフォルトの名無しさん:2012/09/22(土) 01:16:23.22
はい感想掲示板と質問掲示板の区別もつかない>>512のレスはいりましたー
519デフォルトの名無しさん:2012/09/22(土) 01:18:37.33
意味ない変数ならundefinedvariableとかでいいんじゃないの?って思うけど・・・
520デフォルトの名無しさん:2012/09/22(土) 01:23:53.09
意味がないなら名前は何でもいい
何でもいいなら短いほうがいい
しかし短すぎるとすぐに枯渇するし打ち間違えしやすい
つまり4文字程度がベスト
4文字で無意味な文字列といったら誰もが思い浮かべるのがhoge
つまりhogeがすべてを兼ね備えたもっとも美しい識別子なんだよ
521デフォルトの名無しさん:2012/09/22(土) 01:33:02.07
短いのがいいならfooにしとけks
枯渇しねーしfoo打ち間違えるならIT機器に触るのはやめろ
522デフォルトの名無しさん:2012/09/22(土) 01:37:59.62
fooでいいと思う。
そうやって何でもかんでもガラパゴス化を推し進める愚図が多いから
日本のITは世界に遅れをとってるんだろうな。
システム自体に顕著にガラパゴス化は現れてなくとも
そういう精神の愚図が作ったものはやっぱりそういう性質になるんだと思うよ。
523デフォルトの名無しさん:2012/09/22(土) 01:40:34.81
fooは奇数文字数だから美しくない
bar bazとつなげた時も韻がなってないからごろがわるい
一方でhogeならその辺はすべて安心して使える
524デフォルトの名無しさん:2012/09/22(土) 01:45:56.32
ケータイでガラパゴス化に懲りたと思ったらまだそんな人がいるのか。
一人ならいいけど大勢いるとなると日本のIT産業は衰退していくだろうね。
525デフォルトの名無しさん:2012/09/22(土) 02:02:14.22
hoge使ってる奴はクズ
たまにDQN親のイミフな主張をきくけどあれと一緒
526デフォルトの名無しさん:2012/09/22(土) 03:39:16.72
>>479親子ってこういう感じなんだろうな。
残業がどうとかじゃなくて普通に神経を疑われるようなことをさも当然のように行っている様は、
明らかにおかしいhogeをさも当たり前のように使っている様子にそっくり。
以下コピペ↓



2年前にはいってきた新人
うちは少なくとも週に2〜3回は残業が当たり前っていうのは言ってたのに
1ヶ月ほどで母親が電話してきた。
「うちの息子は何も悪くないのになんで残業させられるんですか?」
残業って別に悪いことしたお仕置きでやってるわけじゃねーよって思ったけど
この新人が社長の知り合いの紹介で入ってきたって言うこともあって
当時の上司が少し様子見ってことで新人だけ残業なしにしてやった。

当然、みんなで残業した次の日には新人君は話に入れない。
みんなでメシ食った話や○○さんのがんばりのおかげで10時に終わった〜とか・・・
そしたら今度は母親が怒鳴り込んできた。
うちの息子ちゃんをみんなでいじめてる。息子ちゃんのわからない話で盛り上がらないで!
残業のときの話は禁止にしてちょうだい!って社長に直談判したらしい。

さすがに社長も「特別扱いはできない。もとより残業免除って言うすごい特別扱いしてるのに
それでも耐えられないんだったらうちの会社があわないのですかね〜?
では次からは特別扱いなしで残業もしてもらいますよ。」って言ってやめてもらった。

ほんと神経わからん親子だった。
527デフォルトの名無しさん:2012/09/22(土) 07:47:46.20
質問なのですが
明解C言語入門編LVのC言語は理解できるのですが
独習C++か標準講座C++のどちらを買おうか迷っています。
ネット上にて独習C++はCの知識がある人向けと書いてあったのですが、どのくらい必要なのかわからないので質問しました。
528デフォルトの名無しさん:2012/09/22(土) 07:54:11.90
>>527
独習でいいよhoge
529デフォルトの名無しさん:2012/09/22(土) 08:19:33.30
hoge
hoger
hogest
530デフォルトの名無しさん:2012/09/22(土) 08:49:13.97
>>527
ロベール買っとけ
531デフォルトの名無しさん:2012/09/22(土) 12:31:36.46
>>527
ストロストラップ本買え
理解できないならC++を使うのは諦めろ
532デフォルトの名無しさん:2012/09/22(土) 12:32:45.28
hage
hige
huge
hege
hoge
533デフォルトの名無しさん:2012/09/22(土) 12:52:36.74
homo
534デフォルトの名無しさん:2012/09/22(土) 13:04:13.50
>>531
ハードル高いなおい
535デフォルトの名無しさん:2012/09/22(土) 14:59:35.27
事実だな
むしろ割引きなくらい
536デフォルトの名無しさん:2012/09/22(土) 16:28:05.77
>>527
effective c++
537デフォルトの名無しさん:2012/09/22(土) 16:31:50.83
マジレスすると興味あるFOSSのコードを落としてきて読め
そのレベルの書籍から学べることは何もない。まったく何もない。本当に何もない
538デフォルトの名無しさん:2012/09/22(土) 16:38:29.83
初学者に何言ってんだアホか
539デフォルトの名無しさん:2012/09/22(土) 16:46:31.47
文法おぼえたら、後は設計だけだよ
書籍の購入なんて初学者が嵌る罠だから
>>538
おまえがそう思うなら、既に罠に嵌っている
540デフォルトの名無しさん:2012/09/22(土) 17:01:45.07
書店で手にとって気に入った本を選ぶ
541デフォルトの名無しさん:2012/09/22(土) 17:08:10.65
田舎は大型書店でも書籍の品揃えが悪いよ
一度だけ東京の書店に行ったけれど、品揃えの豊富さには感動したもの
542デフォルトの名無しさん:2012/09/22(土) 17:51:11.30
そうそう神戸の田舎者も感動しました都内の書店には
543デフォルトの名無しさん:2012/09/22(土) 18:22:03.83
文法覚えたらMPやら型消去が身に付くのか?
余程の天才じゃない限り無理だろ
まぁ媒体は本でもWebでもいいけど脱初心者向けのガイドは必要だろ
544デフォルトの名無しさん:2012/09/22(土) 18:26:18.78
>>542
九州の南の方ですが何か

>>543
それって本当に必要な機能か?
本質的な問題を解決するために、ソフトウェアを書くために絶対的に必要な機能か?
545デフォルトの名無しさん:2012/09/22(土) 18:28:24.62
初学者に必要なのは文法、コーディング規約、つくりたいものに似たOSSのコード
あると便利なのがプリンタとkindle
546デフォルトの名無しさん:2012/09/22(土) 19:40:15.18
尼さんステマ乙やがな
547デフォルトの名無しさん:2012/09/22(土) 19:51:04.06
>>542
神戸なら、三宮のジュンク堂でいいじゃん。

都内の三省堂、紀伊国屋、八重洲ブックセンターとかには敵わないけど、
C++ 程度ならそれなりに揃っていたと思うが。
548デフォルトの名無しさん:2012/09/22(土) 20:01:41.61
ム板もここ数年で本当にレベルが落ちたな。
549デフォルトの名無しさん:2012/09/22(土) 23:47:56.16
核実験時代の放射能で徐々に知能低下や無気力化が進みこの前のあれでトドメさされた感じやね
ゆとりたちは完全に老害の被害者だよ
550デフォルトの名無しさん:2012/09/23(日) 01:33:51.18
やっぱりロベールかなー
551デフォルトの名無しさん:2012/09/23(日) 12:40:49.34
552デフォルトの名無しさん:2012/09/23(日) 15:12:55.93
>>539
>文法おぼえたら、後は設計だけだよ
えっC++の場合文法知識だけでいきなり書き始めたらいろいろ罠に嵌るんでないの
メモリポインタとか
553デフォルトの名無しさん:2012/09/23(日) 15:25:30.26
>>531
はげどう
・まずストロストラップ本を読みます
・ストロストラップが積極的に言いたがらない暗黒面を『Effective C++』で補完します


まあハードルが高いのも理由があるということで
554デフォルトの名無しさん:2012/09/23(日) 17:40:53.10
あやしいカタカナ表記やめれ
「禿」が統一見解
555デフォルトの名無しさん:2012/09/23(日) 18:18:10.33
>>554
そうなんだろうけどこの頃は自重すべきだと思うの……
某メタ変数に噛み付くキ……暇人もいるし
556デフォルトの名無しさん:2012/09/23(日) 20:05:06.05
if(){
557デフォルトの名無しさん:2012/09/23(日) 20:09:33.17
ごめんなさい、↑のはミスです.........

質問です。
下のような感じで、変数の値が変わったら一瞬だけtrueが返ってくるような関数ってありませんか。

if(changed(Var)){
}
558デフォルトの名無しさん:2012/09/23(日) 20:22:23.75
特定の変数向けの関数?
それに合わせたフラグを変数毎にグローバル変数で宣言して、
変化を検知したらtrueを返す……てな感じでいいんじゃね
559デフォルトの名無しさん:2012/09/23(日) 20:29:15.87
>>557
class C {
private:
 int x;
 bool isChanged;
public:
 C(): isChanged(false) {}
 int get() { return x; }
void set(int x_) { x = x_; Changed = true; }
bool changed() { bool t = isChanged; isChanged = false; return t; }
};

C X;
X.set(1);
if(X.changed()){ ... }

とかでどうよ。
560デフォルトの名無しさん:2012/09/23(日) 20:30:47.30
バグってるわ…

< void set(int x_) { x = x_; Changed = true; }
> void set(int x_) { x = x_; isChanged = true; }
561デフォルトの名無しさん:2012/09/23(日) 20:49:15.14
>>558
フラグ用に一々変数を設けるのが面倒だし、その分ソースコードの量が多くなって大変なんで、良い感じの関数が標準で無いのかな〜と思ったんですけど
残念ながら標準のライブラリでは無いみたいですね。

数日前にC++を始めたばかりでまともな関数を作る事が中々できないミジンコなんです・・・・


>>559
こんなミジンコな私の為にわざわざ作って頂いてありがとうございます!!
私にとってはかなり重宝なので今後ありがたく使わせて頂きます。

これを機にクラス定義のノウハウの方も勉強します。


お二方ありがとうございました。
562デフォルトの名無しさん:2012/09/23(日) 20:49:48.20
メモリポインタは・・・・あれは難しいなw
563デフォルトの名無しさん:2012/09/23(日) 21:31:44.13
初学者にストロストラップは挫折の道しかないだろ
564デフォルトの名無しさん:2012/09/23(日) 21:32:05.22
びゃーねすっぽすっぽ
565デフォルトの名無しさん:2012/09/23(日) 22:21:41.97
すっぽんぽん すっぽんぽんわーいわーいしたい
566デフォルトの名無しさん:2012/09/24(月) 00:50:01.09
とりあえず、オライリー片っ端から読んどけば良くね?
567デフォルトの名無しさん:2012/09/24(月) 07:06:26.40
fwriteでファイルにDWORDを書き込むと、書き込んだバイナリがバイト単位で逆順になるんですがなんでしょうかコレ
他の構造体などは問題なく書き込めるんですが


DWORD magic='DDS '; //0x44445320

FILE* fp;
fp = fopen(filename, "wb" );
fclose(fp);

出来上がったバイナリを覗くと中身は' SDD'(0x20534444)
568デフォルトの名無しさん:2012/09/24(月) 07:11:56.22
>>567
リトルエンディアンでググってみてくれ
569デフォルトの名無しさん:2012/09/24(月) 07:24:40.07
>>568
ググった
なにこれ面倒くさい
570デフォルトの名無しさん:2012/09/24(月) 07:50:33.74
htonl
571デフォルトの名無しさん:2012/09/24(月) 08:41:42.08
>>567
fwriteが見当たらんね
572デフォルトの名無しさん:2012/09/24(月) 08:42:10.19
MAGIC は通常 ASCII 文字列なんだから char array で扱うよ
例えば WinMerge における unicode の BOM の取り扱いは
    if (m_unicoding == ucr::UCS2LE)
    {
        unsigned char bom[] = "\xFF\xFE";
        fseek(m_fp, 0, SEEK_SET);
        fwrite(bom, 1, 2, m_fp);
        m_data = 2;
    }
    else if (m_unicoding == ucr::UCS2BE)
    {
        unsigned char bom[] = "\xFE\xFF";
        fseek(m_fp, 0, SEEK_SET);
        fwrite(bom, 1, 2, m_fp);
        m_data = 2;
    }
    else if (m_unicoding == ucr::UTF8 && m_bom)
    {
        unsigned char bom[] = "\xEF\xBB\xBF";
        fseek(m_fp, 0, SEEK_SET);
        fwrite(bom, 1, 3, m_fp);
        m_data = 3;
    }
573デフォルトの名無しさん:2012/09/24(月) 13:22:27.13
コンパイラによっては、バージョンによって'ABCD'の値が違ってくるしな。
574デフォルトの名無しさん:2012/09/24(月) 13:59:16.68
DWORDってVCのマクロだよね、確か。
575デフォルトの名無しさん:2012/09/24(月) 16:06:49.05
A
B

C
D

C
B

D
E

A
E
のように「同じ文字列が2つずつ存在しそれぞれ組みを作ってる」ようなファイルを
A
B
C
D
E
となるように整理するプログラムを作りしたいのですが、どなたか助言いただけないでしょうか
576デフォルトの名無しさん:2012/09/24(月) 16:08:03.32
>>571
抽出ミスです…

普通に作るにあたって、文字列はちゃんと文字列として扱えば、
数値データなどはリトルエンディアンで書きだしてあっても普通に読めるってことでいいんですよね
577デフォルトの名無しさん:2012/09/24(月) 16:13:56.91
>>575
std::vector<std::string>に読み込んで
std::sort()→std::unique()じゃだめなん

メモリに収まり切らないなら他の方法もあるけど
578デフォルトの名無しさん:2012/09/24(月) 17:34:34.99
>>576
移植性がないことに注意。同じ端末で同じ環境で処理するなら、大抵問題ない。
579デフォルトの名無しさん:2012/09/24(月) 17:36:54.44
>>578
WindowsPCならおkってことですかね?
ゲームのセーブデータなんかも気になるんですが
580デフォルトの名無しさん:2012/09/24(月) 17:38:29.67
どうせ移植なんてしないだろ
581デフォルトの名無しさん:2012/09/24(月) 17:41:50.71
例えばlongで読み書きするコードを実装したとして、
longが32ビットのバージョンで書いたデータを、
longが64ビットのバージョンで読んだらおかしくなるね。
その場合は、int32_tで書いておけって話にはなる。
582デフォルトの名無しさん:2012/09/24(月) 17:45:12.17
エンディアンのこと気にするくらいなら、構造体にまとめて一気に書き出し・読み出しした方がいいのかな
583デフォルトの名無しさん:2012/09/24(月) 17:46:33.47
バイナリの読み書きは基本的に同じアーキテクチャのPC間に限るだろ
異なる場合はテキストやCSV形式でやり取りするのが常識
584デフォルトの名無しさん:2012/09/24(月) 18:02:45.48
限らないだろ
JpegやPNGのフォーマット、TCP/IPヘッダなどは
ネットワークバイトオーダーであるビッグエンディアン
585デフォルトの名無しさん:2012/09/24(月) 18:19:31.87
ビッグエイリアン
586デフォルトの名無しさん:2012/09/24(月) 18:26:25.69
データ量が小さいならテキストの方が楽ではある
手で書き換えたり出来るし
587デフォルトの名無しさん:2012/09/24(月) 18:30:56.00
ちゃんとした規格ならBEかLEかも規定されてる。
で、移植性を重視したいなら、>>583の言うとおりテキストベースで。
達人プログラマにも書いてあったよね。バイナリはうんこって。
588デフォルトの名無しさん:2012/09/24(月) 18:35:37.43
したがって、画像データならば、pnm 兄弟が最強
589デフォルトの名無しさん:2012/09/24(月) 18:41:29.10
したがって、zipファイルはうんこ
590デフォルトの名無しさん:2012/09/24(月) 18:51:42.65
そしてこのShift_JISである
591デフォルトの名無しさん:2012/09/24(月) 19:01:44.19
>>588
処がどっこい、pnmもバイナリバージョンもあるし、depthが8ビットを越えたときの
エンディアンの規定がないな。

>>584
TIFFはBEもLEもあるな。
592デフォルトの名無しさん:2012/09/24(月) 19:05:17.14
utf-8は素晴らしいでFA?
593デフォルトの名無しさん:2012/09/24(月) 19:28:09.35
UTF-8は、英語でかくひとたちのわがまま
594デフォルトの名無しさん:2012/09/24(月) 19:44:15.87
JIS第4水準が、8バイトとかになったんだっけ?>UTF-8
595デフォルトの名無しさん:2012/09/24(月) 19:47:05.10
なるほど、

「11 22 33 44」を64ビットで表す時、
リトルエンディアンだと
44 33 22 11 00 00 00 00
でいいから、11 22 33 44 + 予備領域00 00 00 00 を確保すれば読むとき一緒になるのか
そういうことか
596デフォルトの名無しさん:2012/09/24(月) 20:11:02.04
>>595
UTF-8の解釈が全くの間違い。スレ違いだから詳細は省略するが、Wikipediaででも調べてみなよ。
597デフォルトの名無しさん:2012/09/24(月) 20:12:54.29
>>596
いやそれとは関係なく、ただリトルエンディアンの有用性に関する個人的解釈
598デフォルトの名無しさん:2012/09/24(月) 21:16:57.01
>>582
x86で書き出してarmで読み出したときマズイ
599デフォルトの名無しさん:2012/09/24(月) 21:22:31.75
>>595
嘘だろ?
600デフォルトの名無しさん:2012/09/24(月) 21:24:49.84
まあXMLでシリアライズすれば済むんだけどな
C/C++には標準でXMLを扱うライブラリが付属してないので
いろいろフリーのパーサーがある
601デフォルトの名無しさん:2012/09/24(月) 21:27:18.03
どの環境でも使えるソースコード公開されてるXMLパーサ教えてください
602デフォルトの名無しさん:2012/09/24(月) 21:32:57.74
603デフォルトの名無しさん:2012/09/24(月) 21:56:24.00
RapidXMLとか
604デフォルトの名無しさん:2012/09/24(月) 22:01:28.44
C♯のXDocument的なやつはないの?
605デフォルトの名無しさん:2012/09/24(月) 22:48:54.02
C#は標準でライブラリに入ってるな
Javaも
606デフォルトの名無しさん:2012/09/25(火) 07:16:54.77
doxygen
607デフォルトの名無しさん:2012/09/25(火) 07:26:08.48
doxygenは最初使った時は感動したが、しばらく使うとOOP構造を視覚化して
くれる機能に物足りなさを感じて消してしまった
608デフォルトの名無しさん:2012/09/25(火) 08:47:42.11
>>596
だから、LEの有用性とUTF-8は全く関係ないんだってば。データ値をみないとサイズが判らないんだから。
609デフォルトの名無しさん:2012/09/25(火) 11:08:52.63
printf("%s\n",NULL);

C++だと正常に動作するのですが、Cだと例外が出てしまいます。
どうしたらよいでしょうか。
610デフォルトの名無しさん:2012/09/25(火) 11:12:38.78
printf("%s\n", "");
にしろ
611デフォルトの名無しさん:2012/09/25(火) 11:22:34.86
>>609
>C++だと正常に動作するのですが、

この根拠が分からない
C++でもまずいだろ
ヌルポインタの位置にどんなデータが入っているかは分からないのだから
しかもヌルポインタを差すポインタはどこも指してない事になっている
612デフォルトの名無しさん:2012/09/25(火) 13:13:03.25
Cの規格書に%sに対する実引数は「文字列配列の先頭要素へのポインタで
なければならない」とあるのでナルポインタを渡してはいけない
文字列の先頭要素を指しているポインタを渡してください
613デフォルトの名無しさん:2012/09/25(火) 14:24:29.64
>>611
これはprintfの仕様です。あまり知られてませんが。

%sにNULLが渡されたときは(null)に変換されるんです。
あと%pにNULL渡すと(nil)になります。
614609:2012/09/25(火) 14:34:26.56
原因がわかりました。 gcc固有の問題でした。

gccが最適化によりprintfをputsに置き換えているのが原因でした。
なので、たとえば printf("a=%s\n",NULL); などであれば最適化されず
a=(null) と出力されることが確認できました。

とりあえず、ビルトイン関数のうちprintfだけを抑止できればいいので
-fno-builtin-printf を指定してなんとかなりました。
615デフォルトの名無しさん:2012/09/25(火) 14:38:34.90
最初はC++とCの違いの問題かと思ってここにしたけど
結局Cのそれもアーキテクチャ固有の現象だったので
ごめんなさい
616デフォルトの名無しさん:2012/09/25(火) 14:49:18.71
>>613
規格と実装の区別ぐらいつけろボケ
617デフォルトの名無しさん:2012/09/25(火) 15:03:30.32
>>616
規格でなく仕様です
618デフォルトの名無しさん:2012/09/25(火) 15:37:35.97
規格でも仕様でも何ページのどこかくらい言え
619デフォルトの名無しさん:2012/09/25(火) 16:55:57.79
64ページのレベル5です
620デフォルトの名無しさん:2012/09/25(火) 19:04:24.30
出典の挙げ方はスレチなので教えてやらない

# どこの馬の骨か知らんが勝手に恥かいてろ
621デフォルトの名無しさん:2012/09/25(火) 21:55:10.40
漠然と質問しますが
newされたものはnewされた物によってdeleteされるべきって設計思想はアリですかね?
そうでない場合が要求される場合か利点て何かありますか?
622デフォルトの名無しさん:2012/09/25(火) 21:58:54.35
というか生成方法を隠蔽しているクラスでは常套手段
逆に生成破棄をクラス側で制限するとアロケーターが使えないので不便なときもある
623デフォルトの名無しさん:2012/09/26(水) 06:38:36.26
スレチいわれそうだけどCOMなんてまさにそれだね
624デフォルトの名無しさん:2012/09/26(水) 06:54:27.10
そこでスマポですよ
625デフォルトの名無しさん:2012/09/26(水) 18:12:22.70
そしてデリータですよ
626デフォルトの名無しさん:2012/09/26(水) 19:03:20.65
フリーター馬鹿にしてんのかオイ
627デフォルトの名無しさん:2012/09/26(水) 21:44:49.25
template<class T>
class myclass{...}

みたいなテンプレートクラスがあったとして、std::map<int,T>とすることは出来ますか?
628デフォルトの名無しさん:2012/09/26(水) 21:53:53.77
myclassはどこいった
myclassの中でって事ならyesだがそのくらい試せばいいだろう
629デフォルトの名無しさん:2012/09/26(水) 21:55:15.52
まずは日本語で説明して
630デフォルトの名無しさん:2012/09/28(金) 13:52:19.73
VisualStudioをUpdateすると動かなくなるプログラムってありますか?
boostとOpenCVに依存したプログラムが多いのですが
631デフォルトの名無しさん:2012/09/28(金) 17:00:45.44
>>627
その説明はワケが分からない
632デフォルトの名無しさん:2012/09/28(金) 19:38:44.34
>>630
環境変数変わってるとか?
633デフォルトの名無しさん:2012/09/28(金) 21:23:09.35
>>630
ライブラリ側と開発環境のバージョンを合わせないとだめとかないか
634デフォルトの名無しさん:2012/09/29(土) 10:50:56.62
オブジェクトの参照関係まで含めてシリアライズしてファイルに保存したいのだけどどうすればいいのかな
635デフォルトの名無しさん:2012/09/29(土) 11:04:11.56
無理じゃないかな
636634:2012/09/29(土) 11:09:04.85
すいません自己解決しました
なんの困難もなかったです
637デフォルトの名無しさん:2012/09/29(土) 12:23:16.65
あるインスタンスが持つインスタンスを別のインスタンス内でも使いたいのですが
スコープの外で使う方法ってありますか?

class A
{
public:
class B hoge;
}

class C
{
public
Cのメンバ関数内で
   hogeのメンバ変数の値を変えたり、メンバ関数を実行したいです
}
638デフォルトの名無しさん:2012/09/29(土) 12:32:21.60
ポインタ
639デフォルトの名無しさん:2012/09/29(土) 12:34:36.36
>>637
hogeとか使ってる基地害には無理
640デフォルトの名無しさん:2012/09/29(土) 12:36:13.75
class A
{
public:
static B hoge;
}
641デフォルトの名無しさん:2012/09/29(土) 12:40:17.51
>>637はhogeを覚える暇はあってもコーディングについてる暇はない池沼。
そんな奴がプログラムやってんの?w
精神構造がマジで腐ってんじゃねーのw

遊ぶ暇はあっても働く暇はないとか言って借金しまくった挙げ句に吊る奴と同じ。
社会に必要ないね。
642デフォルトの名無しさん:2012/09/29(土) 12:43:44.96
吊ってくれりゃいーけどこういうゴミは人として最低限の尊厳もないからへーきで生ポ貰って生きていくよ
643デフォルトの名無しさん:2012/09/29(土) 12:46:33.27
template <class X> class Bob {
friend class X;
private:
void Fuck();
};

class Alice {
Bob<Alice> bob;
public:
void DoSomething() { bob.Fuck(); }
};

こういうふうにfriendに出来る対象をテンプレートで指定したいんですができません
どうすればうまくいきますか?
644デフォルトの名無しさん:2012/09/29(土) 12:53:39.78
>>637
AのインスタンスかhogeをCのメンバ関数の引数で受け取ればいいだけだろ
645デフォルトの名無しさん:2012/09/29(土) 12:58:04.30
hoge自体も問題だけど
そもそもhoge使ってる奴の質問って糞みたいな内容ばっかなんだよな
全く調べてないのが丸分かりの糞質問

>>641
hoge厨は無自覚だから吊るなんてことはない
646デフォルトの名無しさん:2012/09/29(土) 12:59:24.55
>>637
お前はプログラム組むより回線切って引き込もってたほうが社会のため。
647デフォルトの名無しさん:2012/09/29(土) 13:02:38.17
>>637「hogeを覚えたり書いたりする暇はあってもプログラムについて調べる暇なんてないんです><タダで教えてください><」

DQN「パチンコや競馬に行く暇はあっても働く暇なんてないんです><生活保護ください><」



同じwwwwwwwwwwwwwwwwwwwwwww
根性腐ってるwwwwwwwwwwwwwwwwwwwwwwww
648デフォルトの名無しさん:2012/09/29(土) 13:15:36.66
ID出ない板はこれだから
649デフォルトの名無しさん:2012/09/29(土) 13:17:45.19
ID出たところでHogeとか書き込むゴミクズは減らないと思うが・・・
650デフォルトの名無しさん:2012/09/29(土) 13:17:47.77
面白いと思ってんだろ
651デフォルトの名無しさん:2012/09/29(土) 13:22:03.93
>>635
そうだな
お前には無理だな
652デフォルトの名無しさん:2012/09/29(土) 13:23:30.52
>>637を叩きまくってるけど
元凶は>>637みたいなガキを育てた
>>637の親.

>>637の親はマジモンの屑.
近所からは歩く恥さらしって
呼ばれてるよ.
653デフォルトの名無しさん:2012/09/29(土) 13:32:08.68
とうとう親まで叩き始めたw
654デフォルトの名無しさん:2012/09/29(土) 13:38:25.01
>>637=マジキチ
655デフォルトの名無しさん:2012/09/29(土) 13:53:04.31
>>639,640
ポインタとか、staticってやつを使えばいいんですねサンクス
656uy:2012/09/29(土) 14:55:58.07
糞ニートは黙ってろよ
657デフォルトの名無しさん:2012/09/29(土) 17:12:12.70
糞ニートはお前
658デフォルトの名無しさん:2012/09/29(土) 17:41:00.80
hoge
659デフォルトの名無しさん:2012/09/29(土) 19:52:41.65
てst
660デフォルトの名無しさん:2012/09/29(土) 19:53:16.64
共依存するようなケースを除いて全てヘッダーファイルに実装を書いてきたのですが、
マルチコアCPUに買い換えたのを機にこれを見直そうと思いました。
が、面倒で身につきません。

明確に指針を立ててヘッダーファイルと実装ファイルに分けている、
もしくは分けていないという人はいますか?
いたらその理由を教えてください。
661デフォルトの名無しさん:2012/09/29(土) 19:55:38.46
別に直さなくていいだろ
662デフォルトの名無しさん:2012/09/29(土) 19:55:47.89
な、なんでそんなことしてきたのん?
663デフォルトの名無しさん:2012/09/29(土) 20:02:38.67
マルチセッションにサーバー OS が必要とか思ってる手合いか?
664デフォルトの名無しさん:2012/09/29(土) 21:32:11.47
てすと
665デフォルトの名無しさん:2012/09/29(土) 21:51:03.51
また荒らしが湧いてたのか

>>637
愚図がキメェんだよ
hogeとか意味不明
落書きはブログにでも書いてろ
666デフォルトの名無しさん:2012/09/29(土) 21:51:54.40
int main(void) {
hoge();
return 0;
}
コンパイルできませんなにがおかしいんでしょうか?
667─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2012/09/29(土) 21:52:38.79
>>666
ダミアン乙w”
668デフォルトの名無しさん:2012/09/29(土) 21:53:09.39
hogeの何が悪いん?
669─☆─ [ X | I.I.T. ] COURANT DE CONSOLE ◆TXFAX7cidQpG :2012/09/29(土) 21:54:20.54
Cってバカがやるモンだって思ってたけど、やっぱそうだったなw
670デフォルトの名無しさん:2012/09/29(土) 22:10:53.08
>>661 並列コンパイルさせるため
>>662
・クラステンプレートなどヘッダーファイルに書かざるを得ないケースがある
・分けるとファイル数と記述が増えてめんどくさい
これらの理由でhppファイルに全てまとめていました
671デフォルトの名無しさん:2012/09/29(土) 22:24:20.39
並列コンパイルと何の関係が?
672デフォルトの名無しさん:2012/09/29(土) 22:29:57.59
問題なく動いているものを修正しようとするのは初心者
673デフォルトの名無しさん:2012/09/29(土) 22:40:18.56
リファクタリング全否定かよ。
674デフォルトの名無しさん:2012/09/30(日) 00:36:36.00
>>673
一般論としてはそんなのは保守フェーズに入るときにやればいいんジャネ
外部インターフェースがきっちり決まっていて、きちんと動くならそれでおk

ただ>670は目的と手段がちぐはぐに見受けられ、理解してやってるのか不安になるというのはある
プログラマごと取り替えたほうが良いのではないか
675デフォルトの名無しさん:2012/09/30(日) 01:00:43.09
>>660
インターフェースと実装は分離するのが基本
そうすると、実装の取り替えがオブジェクトモジュール単位で実施できて、
当のオブジェクトモジュールのビルドとリンクし直しだけで済むので
C++の場合もちろんインターフェースをヘッダファイルに、実装を.cppの方に書く

そうしておいて、とりあえず普通に書いて動作するレベルにした後、
プロファイラで調べて、何と何の実装をヘッダファイルに移すか白黒つければいいんジャネ
676デフォルトの名無しさん:2012/09/30(日) 08:00:45.27
ただでさえコンパイルの遅いC++で、修正時のコンパイル量が無駄に多くなるような設計は避けたいところ
677デフォルトの名無しさん:2012/09/30(日) 08:21:25.47
>>674
>一般論としてはそんなのは保守フェーズに入るときにやればいいんジャネ

お前の変な考えを、 一般論と言うなよ。
678デフォルトの名無しさん:2012/09/30(日) 08:23:44.00
アホが起床してきたか
679デフォルトの名無しさん:2012/09/30(日) 09:22:16.47
クラスでnewを使って
動的にインスタンス生成することの
メリットが分かりません
教えて下さい
680デフォルトの名無しさん:2012/09/30(日) 09:24:37.70
Javaとか.NETで参照型クラスが流行りなんだよ
681デフォルトの名無しさん:2012/09/30(日) 09:24:40.11
スコープを超えても消滅しない
682デフォルトの名無しさん:2012/09/30(日) 09:26:10.08
生成されて破棄される順番が固定されるより動的にいつでも生成破棄できるほうが柔軟性が高いのは当然
然るに動的な生成破棄を使いこなせばより柔軟性の高い便利なアプリケーションが作れることももはや自明の論理だろう
683デフォルトの名無しさん:2012/09/30(日) 09:26:38.63
ヒープ!
684デフォルトの名無しさん:2012/09/30(日) 09:36:21.59
>>678
徹夜でにちゃん? (w
685デフォルトの名無しさん:2012/09/30(日) 10:10:36.29
>>679
死ね。
686デフォルトの名無しさん:2012/09/30(日) 12:30:01.73
>>679
ネタじゃなく、こういう馬鹿がリアルでいるから困る
必要なメモリは最初から配列で静的に確保しておけとか言うんだぜ
687デフォルトの名無しさん:2012/09/30(日) 12:40:31.09
>>686
実行環境がわかってるコンシューマゲームとかなら普通に有効な選択肢だが?
もちろんアロケーター通して使うから、そのままstaticなオブジェクト配列ってことにはならんが
688デフォルトの名無しさん:2012/09/30(日) 12:44:40.03
>>687
違うよ。staticなオブジェクト配列ってことを言ってるんだよ
689デフォルトの名無しさん:2012/09/30(日) 13:02:48.16
>>687
文脈読めよ
アロケータとか言いたいだけの厨房か?
690デフォルトの名無しさん:2012/09/30(日) 13:08:40.85
>>689
きみアロケーターをなにか高尚なものと勘違いしてないか?
691デフォルトの名無しさん:2012/09/30(日) 13:17:14.80
>>690
もういいって
そういう話じゃないってわかれよ
692デフォルトの名無しさん:2012/09/30(日) 13:17:38.88
>>687が話し理解出来てないアホだな
693デフォルトの名無しさん:2012/09/30(日) 13:17:39.55
>>691
あ、お逃げになられるわけですね
わかりました
694デフォルトの名無しさん:2012/09/30(日) 13:18:29.08
>>692
理解できてないのは君なんだが
695デフォルトの名無しさん:2012/09/30(日) 13:24:15.97
>>686
>必要なメモリは最初から配列で静的に確保しておけとか言うんだぜ

ここではstaticにメモリを何らかの型の配列で確保すると言っている
つまりstaticに必要な型のオブジェクト配列としてそのままとれと言っているのではなく
なんらかの管理手段を通じてそのメモリ領域を利用することを示唆している
もしオブジェクト配列をそのまま使うという意図で言うなら「必要なオブジェクトは最初から配列で〜」と書くはずだ
したがってアロケーターの話が浮上しても流れとしてなんらおかしくはない
696デフォルトの名無しさん:2012/09/30(日) 13:37:29.00
>>695
>つまりstaticに必要な型のオブジェクト配列としてそのままとれと言っているのではなく
>なんらかの管理手段を通じてそのメモリ領域を利用することを示唆している

その解釈の可能性は否定しないが、その解釈であると断定するのは無理がありすぎ。
697デフォルトの名無しさん:2012/09/30(日) 13:38:51.36
>>696
断定してないけど?
698686:2012/09/30(日) 13:39:46.16
>>695
すみません、僕の書き方が悪かったです

必要なオブジェクトは最初から配列で〜です

699デフォルトの名無しさん:2012/09/30(日) 13:40:27.86
領域を確保しておいてそこからアロケートするなんて当たり前のことすぎて
それをアホ扱いするのは無理がある
700デフォルトの名無しさん:2012/09/30(日) 14:46:45.20
拗らせて喧嘩するほどの話か?
701デフォルトの名無しさん:2012/09/30(日) 14:48:41.00
次の話題どうぞ
702デフォルトの名無しさん:2012/09/30(日) 15:12:22.43
void Pussy::Pussy();



あばばばばばばばばばばばばばばばばばばばばばばばばばばばばばばばばwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
703デフォルトの名無しさん:2012/09/30(日) 16:11:12.17
またhogeの話しようぜ
704デフォルトの名無しさん:2012/09/30(日) 16:22:27.67
#include <windows.h>
#include <mmsystem.h>
とtimeBeginPeriod(1) を使わずに1msのタイマ分解能を得たいのですが、
他にどういった方法がありますでしょうか。
C++のSTL等では不可能でしょうか。

timeBeginePeriodを使いたくない理由は、
windowsにしか対応できないからです。
できれば同じコードでマルチプラットフォーム対応できればと考えています。

教えていただけますと嬉しいです。
705デフォルトの名無しさん:2012/09/30(日) 16:25:51.22
#ifdef でプラットフォームごとに分ければ
706デフォルトの名無しさん:2012/09/30(日) 16:26:13.71
std::chronoかboostで
707デフォルトの名無しさん:2012/09/30(日) 16:33:43.21
>>704-705
もしくはラッパー作るとか。
708デフォルトの名無しさん:2012/09/30(日) 16:34:55.68
レスありがとうございます。
http://blog.wonderrabbitproject.net/post.aspx-id=99100bb5-d47e-4683-afc5-65e15d17a26d
ここ見てみたのですがやはりifdefする方がよいのですかね・・
ありがとうございましたm(_ _)m
709デフォルトの名無しさん:2012/09/30(日) 21:09:34.77
>>640
おい、static使っても出来なかったぞカス
710デフォルトの名無しさん:2012/09/30(日) 21:47:00.72
アロケーター厨が去ったと思ったらHoge厨様の降臨か
日曜日だな
711デフォルトの名無しさん:2012/09/30(日) 21:52:04.44
相談とか質問する場として機能して無いんだから
余所で聞けよ
712デフォルトの名無しさん:2012/09/30(日) 22:23:53.85
Java脳向けのC++解説サイトってないですか?
これからはRubyだと学校で言われて超簡単言語Rubyを覚え、社会じゃ役に立たないと知り、
業務は生産性の高いJavaだと言われてちょっと簡単言語Javaを覚えて仕事し続け、
結局世の中C/C++で動いてると知って
簡単な言語ばかり覚えてきた自分に落胆してるような人間向けの解説を探してます。
C言語は業務で使っているので扱えます。
713デフォルトの名無しさん:2012/09/30(日) 22:33:02.69
RubyはともかくJavaはまだ使う方だろ……AndroidとかはJavaで動いてるんだぜ
普通にC++の参考書じゃダメなん?
714デフォルトの名無しさん:2012/09/30(日) 22:35:59.95
すみません。できれば早く覚えてたいという願望がありまして…。
JavaでいうこれはC++ではこうやるんだよ!っていう比較ありきの解説ないかなと思いまして。
715デフォルトの名無しさん:2012/09/30(日) 22:36:33.14
>>712
腐るほどあるのに
おまえの探し方が甘すぎるだけ

要するに Java わかる人が C++ 教えりゃいいんだろ
神からご託宣をいただけるのか、
等身大の傭兵から何か盗めればいいのか
そこにナーバス過ぎちゃ無理だよ無理すぎ
716デフォルトの名無しさん:2012/09/30(日) 22:38:45.48
>>714
文系脳死ね
717デフォルトの名無しさん:2012/09/30(日) 22:54:51.19
ひ、ひどい…相談と書いてあったから相談っぽく相談したのに…。あんまりだ…。

まあMSDNでも漁りますノシ
718デフォルトの名無しさん:2012/10/01(月) 00:12:50.70
>>717
>C言語は業務で使っているので扱えます
この時点で「初心者じゃないから自分で調べることぐらい出来るよね?」
って思われてるんじゃね
719デフォルトの名無しさん:2012/10/01(月) 01:47:29.04
 ベトナムでも“嫌韓”ブーム!?
李明博大統領の竹島上陸から勃発した韓国のすさまじい反日行為。対する日本も“嫌韓”感情に火がついている。
“韓流”ブームも息を潜め、韓国ドラマや韓流スターにうつつを抜かしていた女性たちの中にも、韓国と距離を置く人が増えている。

だが、“嫌韓”感情は隣国・日本だけではない。アジア各地にも広がっている。

中でも根深いのはベトナム。ベトナムは昨年、「満50歳以上、または年齢差が16歳以上」の韓国人男性とベトナム人女性との
国際結婚を禁止する厳しい規定を設けた。

 ベトナム戦争時 韓国人兵士のレイプで産まれた混血児
グローバル化の時代に国際結婚を法律で禁止するという強行策。背景には「ライダイハン」問題がある。

ベトナム戦争時、ベトナムに派兵した一部の韓国人兵士が現地の女性を強姦したり、暴行を振るっていた。
その結果「ライダイハン」と呼ばれる混血児が多数産まれたのだ。韓国人兵士はそのまま帰国し、母子が残され差別に苦しみながら生きてきた。

さらに、最近は韓国人夫のDV(家庭内暴力)などの事例も増えているという。

従軍慰安婦問題といいライダイハン問題といい、その傷跡は深い。“反日”や“嫌韓”の背景にある歴史問題にも目を向けるべきである。
http://www.kon-katsu-news.com/news_a4sj0mIlnO.html
720デフォルトの名無しさん:2012/10/01(月) 02:18:30.57
class A{

};
class B:A{

};
class C:A{

};

main{
int size;
cin>>size;
A* a= new A[size];
C c;
a[2]=c;
}

と基底クラスAに派生クラスであるCを代入しようとすると、
アクセスできない基本クラスAへの変換は許されていませんとでてきます。
なにが原因なのでしょう?
721 ◆QZaw55cn4c :2012/10/01(月) 02:36:07.24
>>720
http://ideone.com/nOlqV
かりにこうだったら、sizeof(A) < sizeof(C) だから、a[] に c は収まりそうもない。
722デフォルトの名無しさん:2012/10/01(月) 04:52:20.02
>>720
A::operator=(A const&) は書いてるの?
723デフォルトの名無しさん:2012/10/01(月) 05:02:47.99
public忘れてる
724 ◆QZaw55cn4c :2012/10/01(月) 07:09:55.72
>>723 が正解ですね。
http://ideone.com/wWanT
725デフォルトの名無しさん:2012/10/01(月) 07:48:55.57
QはC++が理解できてない老害なんだから無理すんなよ
スラッシングも知らないのか
726デフォルトの名無しさん:2012/10/01(月) 07:53:04.32
a[2]=static_cast<A*>(&c);
とかは?
727デフォルトの名無しさん:2012/10/01(月) 07:55:39.86
スライシング
728デフォルトの名無しさん:2012/10/01(月) 07:57:46.61
>>726
それコンパイル通るかやってみたのか
729デフォルトの名無しさん:2012/10/01(月) 07:59:19.14
>>728
すまん、盛大に勘違いした
半年ROMるわ・・・
730デフォルトの名無しさん:2012/10/01(月) 08:01:17.77
>>725
ごみんなさ〜い
731デフォルトの名無しさん:2012/10/01(月) 08:02:44.29
a[]に代入したcをダウンキャストしてcのメンバ関数を呼び出すと見事にあぼ〜んするな
当たり前だが
732デフォルトの名無しさん:2012/10/01(月) 15:44:12.90
>>731
だいなみっく☆キャスト しろよ
733デフォルトの名無しさん:2012/10/01(月) 20:23:04.29
>>732
えっ?
734デフォルトの名無しさん:2012/10/01(月) 21:57:25.41
>>732
あのさあクラスCで拡張された部分がスライシングでなくなってるから
ダウンキャストするとあぼ〜んするんだけど
意味わかってる?
735デフォルトの名無しさん:2012/10/01(月) 22:16:09.97
ちゃんと伝わる日本語を使おうな
しょせんカタカナ英語だけど「〜ingで」はこの場合おかしいだろ
736デフォルトの名無しさん:2012/10/01(月) 22:33:52.60
名詞にすべきだから〜ingで正しいだろ
737デフォルトの名無しさん:2012/10/01(月) 23:04:49.30
正しくはCのメンバ関数を呼ぶと、だな
738デフォルトの名無しさん:2012/10/01(月) 23:44:03.76
スライシングの場合はあぼーんじゃないな

class A {
public:
virtual void print() const {
std::cout << "A!!" << std::endl;
}
};

class B : public A {
public:
void print() const {
std::cout << "B!!" << std::endl;
}
};

int main()
{
A a[1];
a[0] = B();
B* bp = dynamic_cast<B*>(&a[0]);
std::cout << bp << std::endl; // スライシングされているのでダウンキャスト出来ない
B* bp2 = reinterpret_cast<B*>(&a[0]);
bp2->print(); // vtableまで削られているので A の関数が実行される
}
739デフォルトの名無しさん:2012/10/01(月) 23:55:23.56
>>738
virtual無しの話だろ
740デフォルトの名無しさん:2012/10/02(火) 00:02:23.15
仮想関数無しだとそもそもdynamic_cast出来ないぞ
無理矢理reinterpret_castするのかな
741デフォルトの名無しさん:2012/10/02(火) 00:05:39.34
vtableは削られてるのではなくて、
代入や初期化の際にコピーされないだけ
742デフォルトの名無しさん:2012/10/02(火) 01:15:42.28
>>740
そもそもdynamic_castするという話ではないぞ
743デフォルトの名無しさん:2012/10/02(火) 07:06:54.87
スライシングなんて言い回しをするからわかりにくいが、
単にBのA部分をAにコピーしてるだけと言えばすぐ解るだろうに。
744デフォルトの名無しさん:2012/10/02(火) 07:32:37.94
初期化の場合はコピーコンストラクタ A(const A&) が、
代入の場合は代入演算子 operator=(const A&) が動いてるだけだな
745デフォルトの名無しさん:2012/10/02(火) 09:18:49.06
int a[N]
Nの最大値を教えてください。
746デフォルトの名無しさん:2012/10/02(火) 09:33:21.62
Nの最大値は環境によりますが実質無限大です
747デフォルトの名無しさん:2012/10/02(火) 09:37:59.00


ただし物理的・環境依存限界はある
auto variable ならスタックサイズ
global/static ならヒープサイズ
dynamic ならOSのメモリ割り当て限界
748デフォルトの名無しさん:2012/10/02(火) 10:01:28.28
std::size_t から導ける範囲内の処理系限界
749デフォルトの名無しさん:2012/10/02(火) 10:11:16.72
class A{
int b[20*20*20*20*20]
int a[11]
public:
A(){
for{int i=0;i<11;++i}
std::cout<<a[i]<<std':endl;
}
};
がTDM-GCC 4.7.1 64bit
でこのクラスを実行するとエラーになるのは
なぜですか?
750デフォルトの名無しさん:2012/10/02(火) 10:16:15.10
へー、実行できたのか
そんなわけなさそうに見えるが
751デフォルトの名無しさん:2012/10/02(火) 10:19:32.62
揚げ足取りはスルー
752デフォルトの名無しさん:2012/10/02(火) 10:23:35.34
まじめに相手してらんねーやつ
753デフォルトの名無しさん:2012/10/02(火) 10:32:32.69
int b[20*20*20*20*20]でスタックオーバーフロー
754デフォルトの名無しさん:2012/10/02(火) 10:55:12.77
abc* Func();

abc& Func();
ってどう違うの?
755デフォルトの名無しさん:2012/10/02(火) 10:56:47.50
ポインタを返すか参照を返すかの違い
756デフォルトの名無しさん:2012/10/02(火) 11:07:30.95
iiがスライシングでなくなっているからさすがにこれはundefinedだな

class A {
int i;
public:
A(int j = 0) : i(j) {}
void print() const {
std::cout << i << std::endl;
}
};

class B : public A {
int ii;
public:
B(int j = 0, int jj = 0) : A(j), ii(jj) {}
void print2() const {
std::cout << ii << std::endl;
}
};

int main()
{
A a[1];

a[0] = B(1, 2);

B* bp2 = reinterpret_cast<B*>(&a[0]);

bp2->print();
bp2->print2(); // さすがに未定義
}
757デフォルトの名無しさん:2012/10/02(火) 11:31:11.44
そもそもスライシングなどと名前付ける必要はあったんだろうか
代入まで1セットにするから妙なことになる

見るのはこれだけでいいだろう

A a[1];
B* bp2 = reinterpret_cast<B*>(&a[0]);
758デフォルトの名無しさん:2012/10/02(火) 11:39:33.66
でも参照先でポインタに代入したら同じ?
759デフォルトの名無しさん:2012/10/02(火) 11:50:09.32
>>753
クラスのデータはスタックに保存されるんですか?
スタックを大きくするあるいは動的に作成すれば解決ですか?
スタックを大きくすること出来ますか?
760デフォルトの名無しさん:2012/10/02(火) 11:51:35.75
標準出力からアスキーアートで表を作りたいんですけど、
綺麗な表を作る方法とか載ってるホームページとかないですか?
761デフォルトの名無しさん:2012/10/02(火) 11:54:49.02
さあ 3.2MB を 64bit でどうするか見物です
762デフォルトの名無しさん:2012/10/02(火) 11:56:55.46
>>758
同じ
http://ideone.com/i3EAt

>>759
void f(){ A a; }ならスタックから確保
void f(){ A* a = new A(); delete a; }ならヒープから確保
大きいクラスはヒープから確保すればOK
まだスタックを大きくすることは考えない方がいい
763デフォルトの名無しさん:2012/10/02(火) 11:59:47.26
>>762
ありがとうございます。
764デフォルトの名無しさん:2012/10/02(火) 13:08:25.99
>>760
AA関連のサイトには特定の環境の特定のフォントの幅についての言及はあるが、
標準出力だとフォントは指定できないから表示される環境に依存する。
まぁ、等幅フォント前提なら難しくないだろ。
プロポーショナルフォントで憑依される可能性があるなら、諦めろ。
つーか、環境に依存する話はスレ違い。
765デフォルトの名無しさん:2012/10/02(火) 13:27:57.46
int a;

template<int *pa>
struct AA{};

template<int *pa>
struct BB{
enum{ bb = (int)pa }; //B
};

AA<&a> aaa; //@
BB<&a> bbb; //A

@でaのアドレスをテンプレート引数に渡せたので
aのアドレスはコンパイル時定数かと思っていたのですが
Aをインスタンス化するときにBで「定数式が必用です」と
なりました。

グローバル変数のアドレスはコンパイル時定数ではないのですか?
Visual C++ 2010です。
766デフォルトの名無しさん:2012/10/02(火) 13:31:44.84
当たり前だろ…
767デフォルトの名無しさん:2012/10/02(火) 16:26:28.39
constexprが頭に浮かんだがだめか
768デフォルトの名無しさん:2012/10/02(火) 16:27:51.66
constexprならポインタ型も定数式に出来るがVC++にはねーな
769デフォルトの名無しさん:2012/10/02(火) 20:00:00.40
宇宙最強のC++11対応XMLライブラリはどれですか?
770デフォルトの名無しさん:2012/10/02(火) 20:01:36.43
>>769
ブーストとかいうのがあった
771デフォルトの名無しさん:2012/10/02(火) 20:08:39.90
宇宙最強を紹介できる自信がない
772デフォルトの名無しさん:2012/10/02(火) 20:29:03.13
#include <unordered_map>
#include <algorithm>
#include <vector>

template <class C, typename T = typename C::value_type>
std::vector<T> copy_to_vec(const C& from) {
std::vector<T> res(from.begin(),from.end());
std::sort(res.begin(),res.end());
return res;
}

int main()
{
std::unordered_map<int,int> from;
from.insert(std::make_pair(1,2));
auto to = copy_to_vec(from);
}

このコードなんですが、unordered_map::value_typeはpair<const key_type,mapped_type>
と勝手にconstが入ってしまうので、sort(...)が使えません。-fpermissibleを入れろと言ってきます。
テンプレート引数でT=...となっている部分を変えて何とかなりませんか?
773デフォルトの名無しさん:2012/10/02(火) 20:31:18.82
日本語へんだったかもですが、このままだとコンパイルエラーで止まるので、
テンプレート引数で何とか処理したいという質問です。
774デフォルトの名無しさん:2012/10/02(火) 22:19:08.18
>>760
等幅フォントならそんなに難しくない。自分でCSVを表に直すソフト自作したことあるから分かる
 1. 表の縦横のセル数、横一つ一つのセルの横幅最大値を取得
 2. セルの横幅最大値を偶数にして(半角3つ分なら4つになるように修正)
 3. 「┌と─と┬と┐でできた行」「├と─と┼と┤でできた行」「└と─と┴と┘でできた行」
   「│とセル内容でできた行」の4種類を生成して、前3つと後1つを交互にくっつけて表を作成
こんなんでおk
>>771
こんなにカオスな言語を宇宙最強と誇れないんだが
775デフォルトの名無しさん:2012/10/02(火) 23:50:19.05
>>772
中のconstを外したpairを返すtraitsを作って使え

template<class T>
struct pair_remove_const
{
typedef typename std::remove_const<T>::type type;
};

template<class T1, class T2>
struct pair_remove_const<std::pair<T1, T2>>
{
typedef std::pair<typename std::remove_const<T1>::type, typename std::remove_const<T2>::type> type;
};

template <class C, typename T = typename pair_remove_const<typename C::value_type>::type>
776デフォルトの名無しさん:2012/10/02(火) 23:55:34.28
何か良く分からないなあ
unordered_mapだと勝手にKeyでソートされるでしょ
それをvectorに入れてソート?
目的が分からない
初めからvectorに入れてからsort()を呼び出せばいいような
777デフォルトの名無しさん:2012/10/03(水) 00:15:52.29
どんなコンテナにも適用可能な関数にしたいけどunordered_mapを渡したらエラーになったって話だろう
778デフォルトの名無しさん:2012/10/03(水) 00:41:54.32
なるほど

std::remove_constを使うと簡単に変換出来ますね

逆はどうなるのかな
やはり一個一個insertするしかないかな
そうすれば勝手にまたconstになるから
779デフォルトの名無しさん:2012/10/03(水) 00:45:07.77
unordered_map<k, v> m1;
map<k, v> m2(m1.begin(), m1.end());
vector<pair<k, v>> v(m2.begin(), m2.end());
780デフォルトの名無しさん:2012/10/03(水) 04:36:14.09
772ですが、みなさんどうも。
やっぱ力技でconst外すしかないですか。
>unordered_mapだと勝手にKeyでソートされるでしょ
されないのが特徴ですが、mapに一回突っ込むのが妥当な感じですね。

にしてもvector<P<const T>>的なものがソートできないって・・・
中身を書き換えるわけじゃないのにな。
781デフォルトの名無しさん:2012/10/03(水) 04:41:44.29
ソースは短くなるけど、処理時間もメモリー使用量も大きくなる。
STLはそういうことが日常だな。
782デフォルトの名無しさん:2012/10/03(水) 10:53:51.43
>>774
ありがとうございます。
783デフォルトの名無しさん:2012/10/03(水) 22:13:36.17
hoge
784デフォルトの名無しさん:2012/10/04(木) 20:29:02.29
文字列を char [] で確保するとき、文字数+1 を確保しないといかんですよね?

http://www.c-tipsref.com/reference/stdio/snprintf.html


#define N 256

としつつ

char s[N] = {'\0'};

と割り当てて

snprintf(s, N, "%sさんは%d歳の%sです.", name, age, sex);

ってやってますけど、snprintf の3項目目が256文字ちょうどだったとき、もれなくヤバいことおきませんか?

snprintf(s, N-1, "%sさんは%d歳の%sです.", name, age, sex);

な機がするんですけど、いかがでしょ?
785デフォルトの名無しさん:2012/10/04(木) 20:29:48.84
snprintf(s, N-1, "%sさんは%d歳の%sです.", name, age, sex);

にするか

char s[N+1] = {'\0'};

にするかってことで
786デフォルトの名無しさん:2012/10/04(木) 20:36:47.89
>n-1 番目より後の出力文字は文字配列に書き込まずに破棄されます
って書いてるじゃない
787デフォルトの名無しさん:2012/10/04(木) 20:38:55.14
\0 を含めたサイズを snprintf の2つめに指定したらいいんですか?
788デフォルトの名無しさん:2012/10/04(木) 22:24:50.04
C++でインターフェース(純粋仮想関数だけのクラス)を継承する理由がいまいちわかりません
特定のメンバ関数を持っているといった制約はテンプレートで十分ですよね
789デフォルトの名無しさん:2012/10/04(木) 22:30:13.18
interfaceを再利用性の高いクラスに使うとそれを使わない時にコストを払わなくてよいという原則に背くので敬虔なC++信者ならばinterfaceはむしろ使っては「いけない」
790デフォルトの名無しさん:2012/10/04(木) 23:27:20.72
>>788
つ 多態性
791デフォルトの名無しさん:2012/10/04(木) 23:42:32.21
>>790
それはテンプレートで十分だと思うのですが・・・
792デフォルトの名無しさん:2012/10/05(金) 00:02:05.73
>>791
ポインタ使ったことないの?
793デフォルトの名無しさん:2012/10/05(金) 00:09:28.05
>>791
動的な多態性を実現するには、テンプレートでは無理
テンプレートで実現できるのは、コンパイルタイムで確定する静的構造のみなので、一般的に言う自由度の高い多態性は実現できないよ
794デフォルトの名無しさん:2012/10/05(金) 00:21:26.06
struct IBase {
virtual void Method() const = 0; };
template <class X> struct Sub : IBase {
X const & x;
Sub(X const & x) : x(x) {}
void Method() const { x.Method(); } };

void Func(IBase const & x) { x.Method(); }
template <class X> void Func(X const & x) { Func(Sub<X>(x)); }

このようにXが直接interfaceを継承する必要はない
XをFunc以外で利用する際にオーバーヘッドとならないようにXが直接interfaceを継承することは避けるべきである
795デフォルトの名無しさん:2012/10/05(金) 00:27:17.61
動的リンクとかしたことないのかね
796デフォルトの名無しさん:2012/10/05(金) 00:31:00.80
避けるべきであるという表現から絶対に使わないという意図を読み取ることは不可能だ
柔軟性のある表現を勝手気ままに絶対的な法則であるかのように解釈することは愚か者によく見られる行動の1つである
797デフォルトの名無しさん:2012/10/05(金) 00:43:22.39
>>794
アダプタパターンをどや顔で主張されてもな
798デフォルトの名無しさん:2012/10/05(金) 00:45:26.11
>>794
完全抽象化classをinterface呼ばわりすんなよJava公
799デフォルトの名無しさん:2012/10/05(金) 00:49:14.47
>>794
オーバーヘッドってなんだよ
クラス単位のインライン展開もしらないとか?
800デフォルトの名無しさん:2012/10/05(金) 00:50:09.75
しゃべりかたはむかつくけど言ってることはおおむね間違ってないな
他クラスとの連携の仕方を、連携するクラスに押し付けるのではなく
連携を管理するクラスを一つつくり分離できる機能を分離するほうがきれい
801デフォルトの名無しさん:2012/10/05(金) 00:56:24.85
低年齢化
802デフォルトの名無しさん:2012/10/05(金) 01:07:05.66
>>793
Rootを始めとするC++ interpreterを使えば実行時にtemplateが動くけど。
C++はCompile方式じゃないとダメって制限はない。
803デフォルトの名無しさん:2012/10/05(金) 01:35:25.79
ワロタ
お前本当にそれ使ってるのか?
皆が皆使うと思ってるのか?
804デフォルトの名無しさん:2012/10/05(金) 01:36:47.76
高エネ研究じゃ一般的ってか必需品だよな
805デフォルトの名無しさん:2012/10/05(金) 01:42:32.38
GEANT4やらClingやらRootやら医療やら科学者向けに使われることが多いな
806デフォルトの名無しさん:2012/10/05(金) 01:50:19.01
>>802
ちょとずれてるなあ。

これ理解できる?
ttp://codepad.org/WnSwQWG1

動的ポリモーフィズムってのはこう言う事なんだけど。
これはテンプレートだけでは実現できないよね?

807デフォルトの名無しさん:2012/10/05(金) 01:59:06.05
template<class Type> int Value( const Type &value ) { return value.Echo(); }
Value( argv > 0 ? A(): B() );

Interpreterだとこれが動くんだから便利なもんだよ。
だからプログラミングはどうでもよくて、とりあえず手っ取り早く、
速いプログラムが欲しい研究屋に重宝される

808デフォルトの名無しさん:2012/10/05(金) 02:17:26.81
その程度ってどのコンパイラでもだいたいとおるんじゃないの?

まあなに使うにしてもshared_ptrないと話にならんわ。
809デフォルトの名無しさん:2012/10/05(金) 02:25:48.18
>>807
それは多態性と関係ない。
しかも、普通にコンパイルできる。
810デフォルトの名無しさん:2012/10/05(金) 02:35:28.28
>>809
codepadは無理だったけどマジで?
http://codepad.org/7yJ13usy
811デフォルトの名無しさん:2012/10/05(金) 02:48:35.52
テンプレート以前に三項演算子で引っかかってるだろそれ
812デフォルトの名無しさん:2012/10/05(金) 03:14:23.17
三項式が動的な分岐になるから、テンプレートが生成できないのかもな。
普通にif分にしたら当然とおった。

http://codepad.org/FKHFhlWI
813デフォルトの名無しさん:2012/10/05(金) 03:18:47.33
>>812
その変え方なら三項演算子のままでいいじゃないか
814デフォルトの名無しさん:2012/10/05(金) 03:35:44.00
エラーでない書き方おしえてくれよw
815デフォルトの名無しさん:2012/10/05(金) 07:07:25.19
>>804
で、一般論を否定するレベルで皆が常用してるの?ってところがポイントなんだと思うが
816デフォルトの名無しさん:2012/10/05(金) 07:39:15.51
>>812
main()は別にテンプレートとは関係ないからコンパイル通ったんだろ

コンパイル時に変数の値を定数化したいならC++11のcontexprが必要だろ
817デフォルトの名無しさん:2012/10/05(金) 07:39:36.24
○constexpr
818デフォルトの名無しさん:2012/10/05(金) 12:33:00.06
>>805
高IQの人はみんな使うよね
819デフォルトの名無しさん:2012/10/05(金) 12:35:25.48
>>807
便利すぎてわろた次期C++に採用しよう
820デフォルトの名無しさん:2012/10/05(金) 12:50:58.85
よっぽどC++が嫌いなんだな
821デフォルトの名無しさん:2012/10/05(金) 13:00:42.10
iPhone、iPadでアプリ開発をするならCとC++どっちを勉強すれば良い?
822デフォルトの名無しさん:2012/10/05(金) 13:04:57.78
Object-C
823デフォルトの名無しさん:2012/10/05(金) 14:49:16.88
テンプレートな仮想関数を作りたいのだけれど代替手段はありますか?
struct IHello {
virtual ~IHello(void) {}
template <class Allocator> virtual std::shared_ptr<IWorld> CreateWorld(Allocator allocator) const = 0; // ジーザス!コンパイルデキナイ
};
824片山博文MZボット ◆0lBZNi.Q7evd :2012/10/05(金) 14:54:42.75
template <class Allocator>
struct IHello {
virtual ~IHello(void) {}
virtual std::shared_ptr<IWorld> CreateWorld(Allocator allocator) const = 0;
};
825デフォルトの名無しさん:2012/10/05(金) 15:30:27.30
struct A{};
A*operator new(size_t)=delete;

みないな事出来ますか?
826デフォルトの名無しさん:2012/10/05(金) 15:34:10.81
>>825
なにやってんの?
827デフォルトの名無しさん:2012/10/05(金) 15:52:58.71
>>825
仮にそれが出来たとしても↓は止められないけどいいの?

struct B{
  A a;
};

new B();
828デフォルトの名無しさん:2012/10/05(金) 21:40:19.35
うん、いいよ
829デフォルトの名無しさん:2012/10/05(金) 21:56:39.62
class A{};
class B{
 void create(int val){
  【あ】
 };

private:
 A *a;
};

int main(void){
 B b;
 b.create(10);
}

【あ】の箇所でAのインスタンスをval個作成するにはどうすれば良いですか?
830デフォルトの名無しさん:2012/10/05(金) 21:59:06.71
>>829
宿題?
831デフォルトの名無しさん:2012/10/05(金) 22:03:19.36
どこでdeleteする気なんだその宿題
832デフォルトの名無しさん:2012/10/05(金) 22:07:25.28
>>829
class A{};
class B{
 void create(int val){
a.resize(val);
 };

private:
 std::vector<A> a;
};
833デフォルトの名無しさん:2012/10/06(土) 12:57:52.87
ブール型ってBOOLとBoolを使い分けるのが普通なんですか?
834デフォルトの名無しさん:2012/10/06(土) 13:26:38.60
いいえ
835デフォルトの名無しさん:2012/10/06(土) 13:33:25.18
>>833
どっちもC++関係無いな。
その定義次第としか答えられない。
836デフォルトの名無しさん:2012/10/06(土) 13:35:21.86
実際の話
charが2バイトとか1バイトが8ビットじゃないみたいな環境のこと考えて普段からプログラム書いてますか
837デフォルトの名無しさん:2012/10/06(土) 13:49:48.41
charは1byteだと規格で決まっています
1byteが何bitかは決まってませんが
838デフォルトの名無しさん:2012/10/06(土) 14:43:21.75
char って文字を表す値を格納する型だから、
本来は最低でも32ビットくらいないとおかしいよな
839デフォルトの名無しさん:2012/10/06(土) 15:25:00.35
アルファベット以外は文字じゃねーよ黄猿死ねってことだろ
840デフォルトの名無しさん:2012/10/06(土) 18:41:54.62
printfやfprintfに自前クラスを渡したい。

class I {
int n;
public:
I(int n=0): n(n) {}
operator int() const {
return n+1;
}
};
I i(10);

printf("%d",int(i)); //OK
printf("%d",i); //コンパイルエラー

どうすればいいですか?
841デフォルトの名無しさん:2012/10/06(土) 18:45:18.36
明示的に変換するほかない
842デフォルトの名無しさん:2012/10/06(土) 18:46:58.92
>>840 D言語なら可能
843デフォルトの名無しさん:2012/10/06(土) 18:48:29.13
Dのステマw
844デフォルトの名無しさん:2012/10/06(土) 19:58:41.24
>>840
そもそも、C++で型保証ができない可変個数引数を使うのがわるい。
つまり、お前は死ぬべきだ。
845デフォルトの名無しさん:2012/10/06(土) 20:02:02.80
>>840
素直にstd::cout使うか、printf風に書きたかったらboost::format使うべき。
846デフォルトの名無しさん:2012/10/06(土) 20:21:55.03
>>844
C++11を知らないお前が死ぬべきだ()
printfは型安全に実装できるはずだろ。
847デフォルトの名無しさん:2012/10/06(土) 20:22:28.38
まぁ、みんなありがとう。
printfではできないことは分かった。
848デフォルトの名無しさん:2012/10/06(土) 20:48:22.33
>>846
実装と型保証の区別ぐらいできるようになろうよ…
849デフォルトの名無しさん:2012/10/06(土) 22:21:27.75
hoge
850デフォルトの名無しさん:2012/10/06(土) 22:26:22.81
キャスト
851デフォルトの名無しさん:2012/10/06(土) 22:31:15.07
空クラスつくって(メンバなし)
そのクラスの変数宣言したとき
メモリに領域確保されるらしい
どれくらい、そしてなにが確保されるの?
852デフォルトの名無しさん:2012/10/06(土) 22:35:25.75
1byteって決まってるらしい
853デフォルトの名無しさん:2012/10/06(土) 22:37:24.98
空かもしれないし1byteかも知れないしもっと大きいかもしれない
854デフォルトの名無しさん:2012/10/06(土) 22:54:35.70
理解した。
あと
データメンバ、メンバ関数のあるクラス作って
その変数宣言したとき
それ用にメモリに領域確保されるはず。
データ用の確保はわかるけど(intなら4バイトとか)
メンバ関数用の確保は何?
関数コードのあるアドレスが確保されるの?
855デフォルトの名無しさん:2012/10/06(土) 22:56:08.91
メモリポインタが確保される
856デフォルトの名無しさん:2012/10/06(土) 22:58:54.17
>>855
指定の関数命令コードの
先頭のアドレスへのポインタってこと?
857デフォルトの名無しさん:2012/10/06(土) 23:00:04.63
非仮想なら確保されないし仮想ならVTableへのポインタが確保されたりほかの何かが確保されたりする
858デフォルトの名無しさん:2012/10/06(土) 23:00:54.18
仮想関数じゃなきゃ関数ポインタなんか確保されねーよ
859デフォルトの名無しさん:2012/10/06(土) 23:04:11.95
仮想関数じゃなきゃ確保されないって
おかしくない?
じゃあどうやってオブジェクトのメンバ関数を
認識できてるの?
860デフォルトの名無しさん:2012/10/06(土) 23:06:40.51
>>859
普通の関数と同じだよ
861デフォルトの名無しさん:2012/10/06(土) 23:12:36.35
メンバポインタで関数を指定できるから
なにかが確保されてるはずなんだけど
862デフォルトの名無しさん:2012/10/06(土) 23:14:27.56
>>859
コンパイル時に確定、それが非仮想関数
863デフォルトの名無しさん:2012/10/06(土) 23:16:16.59
>>861
されない
隠しthisを受けとるだけの、普通の関数だよ
クラス自体には何の情報も持ってないよ
864デフォルトの名無しさん:2012/10/06(土) 23:17:15.86
静的に解決してるんだよ
865デフォルトの名無しさん:2012/10/06(土) 23:18:55.70
クラス内関数がthisポインタを暗黙に取る関数である、という記述を入門書には書いて欲しい時も多い
866デフォルトの名無しさん:2012/10/06(土) 23:20:32.53
書いてあるよ
っていうか少し考えればわかることだし
867デフォルトの名無しさん:2012/10/06(土) 23:21:19.70
>>865
書いていない入門書が存在することに驚いた
868デフォルトの名無しさん:2012/10/06(土) 23:24:36.74
>>866
それ分かる奴は入門者ではないだろう
boost::bindやら使わんと、そも明示的にthis渡す機会とかないし
869デフォルトの名無しさん:2012/10/06(土) 23:29:27.94
静的に解決できるとは思えないけど?
静的ならば静的メンバ関数と同じになるじゃないか
870デフォルトの名無しさん:2012/10/06(土) 23:32:09.48
>>869
だから基本的に同じなの
暗黙にthisを受けとる事だけが違うの
871デフォルトの名無しさん:2012/10/06(土) 23:38:11.33
センスあるやつは一言説明するとあっなるほどっ!てなるところなんだけどねぇ
872デフォルトの名無しさん:2012/10/06(土) 23:46:01.11
わからない
class Hoge0{
void func(){;};
};
class Hoge1{
void func(){;};
};
int main(){
Hoge0 m;
m.func();
}
こんなとき静的には解決できないはず(どちらかわからないから)
mになんらかの情報(例えば関数コードがあるアドレス)
が格納されていなければならないはず
873デフォルトの名無しさん:2012/10/06(土) 23:50:37.23
>>872
めんどくせーなー
自分で型を宣言してるだろーが

あと、そのクラス名を使うとヤツが来るぞ
874デフォルトの名無しさん:2012/10/06(土) 23:53:02.16
>>872
m.func()と言う呼び出しは、mに対して何らかの処理を加えるということなので、
例えばvoid sfunc(Hoge0* p)という静的関数で
 sfunc(&m);
と書くやり方でも実現できる
コンパイラ的には m.func() に行き当たったら、
機械的に sfunc(&m)に置き換えれば良いから静的関数だけで事足りる

sfunc()の中身は、もちろんHoge0::func()の定義から、これまた機械的に生成できる
何も問題は生じない
875デフォルトの名無しさん:2012/10/06(土) 23:58:55.84
>>872
その場合、
Hoge0_func()
Hoge1_func()
と言う二つの関数が定義される
で回答になるかな?
876デフォルトの名無しさん:2012/10/07(日) 00:00:11.60
>>875
お客さん引数を忘れてますよ
877デフォルトの名無しさん:2012/10/07(日) 00:03:45.10
>>876
オット失礼

Hoge0_func(Hoge0* this)
Hoge1_func(Hoge1* this)
だな
878デフォルトの名無しさん:2012/10/07(日) 00:13:04.64
>>872
はげ使うな氏礻
879デフォルトの名無しさん:2012/10/07(日) 00:15:12.57
Hoge0::func()
Hoge1::func()
そもそもこう記述できる意味を考えろよ
880デフォルトの名無しさん:2012/10/07(日) 00:42:02.99
int main(){
class Hoge0 m;
void (Hoge0::* fp)() ;
fp = &Hoge0::func;

(m.(*fp))()
}
上記コードで
上のfpはメンバポインタでこれはアドレスではなくオフセット値だと本ではあった
要するに(m.(*fp))のアドレスは
(&m)+fpとなるんだろう
これはつまりmの中に関数に関するなにかの情報があるということでは
ないでしょうか?
そうするとmの中には何も情報がなく静的に解決されるという
話はおかしくなると思うんだけど。
881デフォルトの名無しさん:2012/10/07(日) 00:42:41.75
int main(){
class Hoge0 m;
void (Hoge0::* fp)() ;
fp = &Hoge0::func;

(m.(*fp))()
}
上記コードで
上のfpはメンバポインタでこれはアドレスではなくオフセット値だと本ではあった
要するに(m.(*fp))のアドレスは
(&m)+fpとなるんだろう
これはつまりmの中に関数に関するなにかの情報があるということでは
ないでしょうか?
そうするとmの中には何も情報がなく静的に解決されるという
話はおかしくなると思うんだけど。
882デフォルトの名無しさん:2012/10/07(日) 00:46:15.42
>>881
どの本読んだ?
完全に間違いなので、参考までに教えてくれ
883デフォルトの名無しさん:2012/10/07(日) 00:47:35.53
>>881
再度確認するが、仮想関数ではないんだよな?
884デフォルトの名無しさん:2012/10/07(日) 00:52:10.51
C++明快入門って本だけど
間違ってはないと思うけど
あと仮想関数のことじゃないですよ
885デフォルトの名無しさん:2012/10/07(日) 01:02:13.19
>>881
thisポインタを暗黙に引数に取るただの関数だと何度(ry
クラス内関数内でthis->って出来るのは、thisが引数として渡ってきてるからだよ
886デフォルトの名無しさん:2012/10/07(日) 01:05:54.70
アセンブリまで学ぶと、この辺りもっと明確に実感できるんだけどな

VC++のコンパイラだと this ポインタは ecx レジスタで渡されてくる
887デフォルトの名無しさん:2012/10/07(日) 01:15:57.97
>>884
情報ありがとう

話は元に戻るけど、間違ってるものは間違っているんだよ
君も言っているように、説明がつかないだろ?
でも、静的解決理論に何の矛盾もないんだよ?
888デフォルトの名無しさん:2012/10/07(日) 01:29:48.83
>>881
関数の情報はどこかにはあるが仮想関数でないならmの中にはない

class Hoge0{
 void func(){};
};


struct memfunc_info
{
 int signature_id;
 void (*pointer)(void);
};

memfunc_info *memfunc_table[NUM_OF_CLASS];


int main(){
 Hoge0 m;
 void (Hoge0::* fp)();
 fp = &Hoge0::func;

 //(m.*fp)();
 memfunc_info info = memfunc_table[get_classid(m)][(int)fp];
 switch (info.signature_id) {
 case VOID_VOID:
  ((void(*)(Hoge0 *))info.pointer)(&m);
 }
}
889デフォルトの名無しさん:2012/10/07(日) 01:31:35.13
>>881
CFrontのソースリストが今ならタダ!
http://sourceforge.jp/projects/sfnet_cfront/
890889:2012/10/07(日) 07:24:05.60
とオモタが、スマンこのCFrontはCfrontじゃなかった…

Cfrontのソースは、正しくはこっちらしい↓
http://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_1.0/src/cfront.tar.gz
(via http://www.softwarepreservation.org/projects/c_plus_plus/index.html#cfront
891デフォルトの名無しさん:2012/10/07(日) 07:25:38.59
>>884
間違ってると言われて間違ってないと思える根拠は何なの
全知全能の神ですか
892デフォルトの名無しさん:2012/10/07(日) 10:07:39.40
using namespace std;

質問なんですが
C標準ライブラリのstdin, stdout, stderrと、C++標準ライブラリのcin, cout, cerrってどんな関係にあるの?
例えば、coutなら、それは中でstdoutを使っているの?
それとも共通のシステムコールを使っているだけで、coutとstdoutの間に平には依存関係は無いの?

coutのstreambufを自作のに差し替えて、cout << "Hello World!" << endl; と書かれたときに全部大文字に変換して標準出力に出す、
(つまり標準出力→加工→標準出力という処理)をやるとき、streambufの中でstdoutを使っていいのかどうか迷い中
893デフォルトの名無しさん:2012/10/07(日) 10:13:52.86
>>892
std::syncwithstdio()なんてメンバ関数がわざわざあるんだから内部的には
異なるバッファを持っていると考えた方が正しいと思う

それにC++のストリームは継承が効いてるからね
いろいろと内部が違うぞ
894デフォルトの名無しさん:2012/10/07(日) 10:27:10.57
あ、ごめん

std::ios::sync_with_stdio()だわ

試してもらうとわかるけどこれをfalseにすると読み書き速度は上がるが
stdxx系と一緒に使用した場合順番通りに行われる保証が無くなる
デフォルト引数はtrueなんで読み書き速度は下がるが順番通りが保証される
895デフォルトの名無しさん:2012/10/07(日) 10:33:41.61
http://d.hatena.ne.jp/s-yata/20100726/1280138663

デフォルトでtrueになってるからiostream、fstreamは遅いのだと考えられる
falseにしてstdxx系を一切使わないようにすれば結構速い
896892:2012/10/07(日) 10:59:36.46
dクスつまりstdoutとcoutでは
 ・バッファは別
 ・std::ios::sync_with_stdio(true)のとき、endl毎にまずfflush(stdout)してからC++側のflush()する(多分)
という関係であるっぽい了解
つまりcoutから使う前提の自作streambuf内では、std::ios::sync_with_stdio()は無関係で
かつstdoutを使いまくって無問題、
みたいな
897デフォルトの名無しさん:2012/10/07(日) 11:05:16.21
>>896
std::coutが実際はどこに向けられているか分からないんだぞ
stdoutは常に標準出力だろ
やってみおかしくなるから
898デフォルトの名無しさん:2012/10/07(日) 11:11:29.58
>>897
?むしろcoutがどこに向かっているかは結びついているstreambufが決めるのでは

streambufの差し替えでcoutに書かれた内容をファイルに落とすことはできているわけだが
(ちなみにこのときはstreambufからfstreamに落とす形がとれたのでC++の世界だけで話が済んだ

fstreamがstdoutに置き換わるだけなんジャネーノ
899デフォルトの名無しさん:2012/10/07(日) 11:33:08.90
説明がおかしかった

std::coutも標準出力だね
次のような場合がおかしくなる

int main()
{
std::ofstream fs("test.txt");
std::streambuf* osbuf = fs.rdbuf();
std::ostreambuf_iterator<char> oic(osbuf);

oic = 'a';
std::putchar('b');
}
900デフォルトの名無しさん:2012/10/07(日) 11:33:21.20
糞みたいな質問する前にISOでもJISでも読んでこいよ
それで理解できないならC++なんか使うな
ゴミクズプログラマが糞みたいなコードを世に出すな
901デフォルトの名無しさん:2012/10/07(日) 12:09:45.04
>>899
んーまあ参考にします
cout経由とそれ以外経由の出力先相違(といっても>892はどっちも標準出力だが)は問題視しませんので
(主眼はcoutに対するマニピュレータ使用を捨てずにリダイレクトとか文字列内容の加工を実現することにある
902デフォルトの名無しさん:2012/10/07(日) 13:22:25.03
皆実際仕事でiostream使ってんの?
ログ出力位ならいいけど実際使えなくね?
903デフォルトの名無しさん:2012/10/07(日) 14:15:13.14
operator <<がダサいってところとわずかに遅いってとこ以外は*streamのが便利と思うが
904デフォルトの名無しさん:2012/10/07(日) 14:59:26.74
置き換えが必要になったとき修正必要箇所の検出に漏れが出そう
905デフォルトの名無しさん:2012/10/07(日) 15:12:58.09
ある意味iostreamメチャ便利ですが

自作クラスFooに対して
 std::ostream& operator<<(std::ostream& stream, const Foo& obj)
を定義するだけで、どんなクラスも統一的にダンプできてマニピュレータも効く
(上記関数内で複数要素をstream <<するとき、setw()系マニピュレータの効きを正しくするには一工夫要るが

さらにその際ストリームに出力するフォーマットをうまく考えておけばシリアライザも兼用できる
つまり
 std::istream& operator>>(std::istream& stream, Foo& obj)
を定義してデシリアライズすると良い
906デフォルトの名無しさん:2012/10/07(日) 16:04:41.52
3つのクラス Nasubi Letasu Qri があったとして、
ひとつの Nasubi へのポインタを Retasu と Qri が共有して持ってる場合、
>>905 のような方法でちゃんとシリアライズ、デシリアライズできるの?

ダンプはできるだろうけど
907906:2012/10/07(日) 16:07:54.86
>>905
すまん

よく考えたら、不可能ではない事に気づいた
(お行儀は悪いだろうけど)
908デフォルトの名無しさん:2012/10/07(日) 16:16:49.36
A y=xでA y(x)と同じ振る舞いをさせたい(コピーコンストラクタを起動したい)のですが、
xをintに変換したものが呼び出されているようです。
この初期化の仕方を禁止する(明示的なものだけ残す)か、正しい定義をするか・・・
C++11でも可能です。よろしくお願いします。

#include <iostream>

struct A {
int n;
A(int i): n(i+1) {
std::cout << "value init" << std::endl;
}
explicit A(const A& rhs): n(rhs.n) {
std::cout << "copy init" << std::endl;
}
operator int() const { return n; }
};


int main()
{
A x(0);
A y=x;
A z(x);
std::cout << x.n << std::endl;
std::cout << y.n << std::endl;
std::cout << z.n << std::endl;
}
909デフォルトの名無しさん:2012/10/07(日) 16:20:12.37
A(int i)=delete;
910デフォルトの名無しさん:2012/10/07(日) 16:25:20.39
>>909
いや、それは必要なんです・・・
それを生かしておく方法はありませんか?
911デフォルトの名無しさん:2012/10/07(日) 16:29:49.88
operator=( const A& )を追加
912デフォルトの名無しさん:2012/10/07(日) 16:34:22.29
何ともならんのだけど・・・

A& operator=(const A& rhs) {
std::cout << "operator= called" << std::endl;
n = rhs.n;
return *this;
}
913デフォルトの名無しさん:2012/10/07(日) 16:52:22.73
operator=(int)を追加
914デフォルトの名無しさん:2012/10/07(日) 16:55:48.96
>>913
ちょっと意図が分からないので説明してもらえませんか?

近いところまでは行ってると思うんだけど・・・

#include <iostream>

struct A {
int n;
explicit A(int i): n(i+1) {
std::cout << "value init" << std::endl;
}
explicit A(const A& rhs): n(rhs.n) {
std::cout << "const copy init" << std::endl;
}
explicit A(A& rhs): n(rhs.n) {
std::cout << "copy init" << std::endl;
}
operator int() const { return n; }
};

int main()
{
A x(0);
A y=x;
A z(x);
std::cout << x.n << std::endl;
std::cout << y.n << std::endl;
std::cout << z.n << std::endl;
}
915デフォルトの名無しさん:2012/10/07(日) 17:00:06.06
ttp://ideone.com/URoDB
問題ないように見える
916デフォルトの名無しさん:2012/10/07(日) 17:05:54.98
とりあえず結果はよさそうです。
A(const A&)が呼ばれなくなりましたね。
explicitをつけると失敗するというのは気持ち悪い・・・何が起こっているのか?
917デフォルトの名無しさん:2012/10/07(日) 17:07:35.23
やっぱダメよ!
const A x(0);
で破綻する・・・。
918デフォルトの名無しさん:2012/10/07(日) 17:14:47.32
>>915
のままだとconst A x(0);もOKなんですね。
わけが分からなくなってきた。
919デフォルトの名無しさん:2012/10/07(日) 19:47:06.94
これでおk(C++11)

http://ideone.com/WHanG
920デフォルトの名無しさん:2012/10/07(日) 22:56:48.57
namespace Example
{
#define USE_SPACE_VIDEOS Extender::Multimedia::Videos
  struct FirstOuterDependent
  {
    int Something( USE_SPACE_VIDEOS::Fillter &filter );
  };
  struct SecondOuterDependent
  {
    int Something( USE_SPACE_VIDEOS::Fillter &filter );
  };
#undef USE_SPACE_VIDEOS
}

namespace Videos = Extender::Multimedia::Videos;で定義したVideos消せないから
結局プリプロセッサ使うしか無い。エイリアス系の名前ってどうにか消せないのか?
921デフォルトの名無しさん:2012/10/07(日) 23:02:35.91
消せないってなんだよ 意味わからん
922デフォルトの名無しさん:2012/10/07(日) 23:06:28.01
#undefみたいにする事だよ
923デフォルトの名無しさん:2012/10/07(日) 23:08:30.21
消せないだから逆か。
#undefのような事ができないって事。
924デフォルトの名無しさん:2012/10/08(月) 00:03:17.61
>>920
スコープ出れば消えたも同じだしエイリアス使う以外のやり方もあるでしょ
ttp://codepad.org/KwxPx2fQ
925デフォルトの名無しさん:2012/10/08(月) 00:22:17.89
1つの同じ名前空間内で、別々の名前空間に対し、同じ名前を付けたいんだ。
1つの名前空間を複数に別けるってのはちょっとねぇ。
926デフォルトの名無しさん:2012/10/08(月) 00:31:10.38
class Dependent
{
  namespace Videos = Extender::Multimedia::Videos;
public:
  int Something( Video::Fillter &filter );
};
こうできりゃ最高なんだけどねぇ。
927デフォルトの名無しさん:2012/10/08(月) 00:33:41.20
できないの?
928デフォルトの名無しさん:2012/10/08(月) 01:44:12.76
>>925
> 1つの名前空間を複数に別けるってのはちょっとねぇ。
そんな個人の感覚を優先してマクロ使うほうがいいなんてC++使うのは向いてなさそうだな
ttp://codepad.org/BZYexHQN
929デフォルトの名無しさん:2012/10/08(月) 10:32:53.76
>>926
ナショナリズムは小児病
リベラルは厨二病
社会に出れば人間誰しもコンサバティブ(真の保守)な考え方を持つに至るものだ
もっともそれはその者が人間であるに足る知能を持つ場合に限られるのではあるが
930デフォルトの名無しさん:2012/10/08(月) 15:45:07.86
>>928
大規模開発してるとマクロでもいいから既存のシンボル名を消したいってのが解るようになるよ。
マルチメディア向け仮想層を構築すると、依存するライブラリに同じような名前がかなり登場する。
.cppに関してはどうでもいいけど、.hだと安易な名前空間の省略ができない。なんとか、
名前空間の汚染を少なくしようとすると汚い方法しか思いつかない。

読みづらくなるから嫌だけどusing namespaceもありっちゃありかなぁ。
こいつなら上書き可能だし。
931デフォルトの名無しさん:2012/10/08(月) 15:56:40.76
どう見ても自分はバカだ、と言ってるようにしか見えない。
932デフォルトの名無しさん:2012/10/08(月) 16:02:06.84
じゃお利口な方法教えてよ。
933デフォルトの名無しさん:2012/10/08(月) 16:04:47.74
あと、もうひとつ。defineなんて多用すべきじゃないけど、
こんかいの場合でdefineが問題になる点は何?
まさかgotoは絶対悪。gotoを書かなければ似たような事をしていいとかそんな思考?
934デフォルトの名無しさん:2012/10/08(月) 16:08:53.86
>>928
・無名名前空間はヘッダーで書いても意味がない
・N1とN2をNにまとめてるが、N1とN2が干渉したら完全名じゃないとアクセスできない
・NN内でNと同じ名前を定義したい場合衝突する
935デフォルトの名無しさん:2012/10/08(月) 16:16:45.59
> 安易な名前空間の省略

なんてしなきゃいいだけだろ。

本当に大規模開発してるのか?
大規模開発で安易な名前の省略とかしてたら、マジで死ねるぞ。
936デフォルトの名無しさん:2012/10/08(月) 16:25:44.71
>>935
楽に出来ることは楽にできたほうがいいだろうに。
あと、これはどういうケース?
>マジで死ねるぞ。
defineとundefで狭い範囲だけ有効な名前つける場合問題になったことはないけど。
ただ個人的にはキモいんで完全に同等機能をもった代替案がほしい。
937デフォルトの名無しさん:2012/10/08(月) 16:40:57.58
>>936
> 楽に出来ることは楽にできたほうがいいだろうに。

小規模なら小手先テクニックでいいかもしれないが、大規模 (=多人数) だとみんなが
ちゃんと理解できる方法でやらないとダメだろ。

> defineとundefで狭い範囲だけ有効な名前つける場合問題になったことはないけど。

たとえば関連する修正箇所探すだけでも、小手先でそんな変なことしてるとえらく面倒
になるぞ。
まあ、最近のツールは結構賢いからあまり気にすることはないのかもしれないが。
938デフォルトの名無しさん:2012/10/08(月) 16:51:57.98
>>937
つかうっていってもヘッダーの限られた範囲だけで、ヘッダーまたいだりすることは無いからねぇ。
まぁ、オムニ補完に頼りっきりの開発者だと辛いだろうね。

で、いい代替案は無いかねぇ。
939デフォルトの名無しさん:2012/10/08(月) 16:57:23.54
外部結合を持つ識別子に「取り消し」って、そもそもどんな要求なんだろう
940デフォルトの名無しさん:2012/10/08(月) 17:06:00.98
エイリアスだから実体と結合してる訳じゃない
941デフォルトの名無しさん:2012/10/08(月) 17:16:29.63
いい加減、「そんな要求はアホだろ」と言われてることに気づけよ
942デフォルトの名無しさん:2012/10/08(月) 17:20:29.07
>>939
名前の衝突を防ぐための要求。undefが存在するのと同じ理由だよ。
943デフォルトの名無しさん:2012/10/08(月) 17:21:14.72
>>941
お利行さんはどうすんの?
944939:2012/10/08(月) 17:30:08.15
あ、あれ?
>>940 でいちおー納得したつもりでいたけど
やっぱビンゴだったの??
945デフォルトの名無しさん:2012/10/08(月) 18:40:12.51
>>944
何が?実体じゃなくエイリアスを前提に言ってることは変わらないけど?
946デフォルトの名無しさん:2012/10/08(月) 19:05:18.72
> お利行さんはどうすんの?

>>920のケースなら
> 1つの同じ名前空間内で、別々の名前空間に対し、同じ名前を付けたいんだ。
> 1つの名前空間を複数に別けるってのはちょっとねぇ。
に対して
> そんな個人の感覚を優先してマクロ使うほうがいいなんてC++使うのは向いてなさそうだな
のとおりでC++的でない設計を要求するような感覚は無視して素直に

namespace Extender { namespace Multimedia { namespace Videos {
  struct FirstOuterDependent
  {
    int Something( Fillter &filter );
  };
  struct SecondOuterDependent
  {
    int Something( Fillter &filter );
  };
}}}

namespace Example {
  using Extender::Multimedia::Videos::FirstOuterDependent;
  using Extender::Multimedia::Videos::SecondOuterDependent;
}
947デフォルトの名無しさん:2012/10/08(月) 19:40:08.83
管理下に無い名前空間に割りこむなんて最悪じゃん。
外部ライブラリに似たような名前のクラスや関数できたらどうすんの?
948デフォルトの名無しさん:2012/10/08(月) 19:48:46.72
マクロ嫌いが原理主義化して手段にこだわり結果を見失うとは・・・
これが取り憑かれたって事か
949デフォルトの名無しさん:2012/10/08(月) 19:50:32.07
>>946
そもそもマクロは何がダメなのか分かってるのか?
950デフォルトの名無しさん:2012/10/08(月) 19:51:40.18
マクロなんか使った事ないが困った事一度もないな
タイプ減らす以外にマクロならではってのあんの?
951デフォルトの名無しさん:2012/10/08(月) 19:53:54.81
メッセージクラッカ
952デフォルトの名無しさん:2012/10/08(月) 19:55:06.09
>>947
割り込まれるようになってるのが名前空間で
それがいやならクラスを使うべき

>>950
__cplusplus や assert も否定されますか?
953デフォルトの名無しさん:2012/10/08(月) 19:57:24.35
>>950
マクロに限らず演算子や型定義、関数定義を覗いたら言語機能の殆どがタイプ量減らすための構文だろ。
タイプ量気にしないならC使ってりゃいい。
954デフォルトの名無しさん:2012/10/08(月) 19:57:41.32
>>950
俺も困ったことは全くないが、一応
処理速度を落とさずにコピペを防ぐというメリットがあることは知ってる。

あと、ライブラリなんか作ってると、一つのソースで、
マクロで VC++用、GCC用(いわば Win用、Linux用)と分けることはよくある。

デバッグ用、リリース用をマクロで分けることもよくある。
955デフォルトの名無しさん:2012/10/08(月) 19:59:17.00
>>952
できると、していいじゃ違うでしょ。
そもそも理想論は置いといて実質の話だし。
956デフォルトの名無しさん:2012/10/08(月) 20:00:55.72
>>952
そもそも当初の目的を見失ってるだろ
957デフォルトの名無しさん:2012/10/08(月) 20:05:35.53
>>952
VectorとかListとかありきたりな名前つけたらすぐ衝突するじゃねぇか。
958デフォルトの名無しさん:2012/10/08(月) 20:06:34.93
マクロなんてデバッグ目的でしか使わないな
959デフォルトの名無しさん:2012/10/08(月) 20:09:28.88
>>954
vlcやmplayerの様にアーキティクチャー依存部は、win32とかlinuxとか
ソース単位でディレクトリーに切り分けりゃいいものを、混在ソースを書きたがる奴は
何がしたいんだろうね。
960デフォルトの名無しさん:2012/10/08(月) 20:11:17.84
マクロはいいんで、エイリアス衝突を回避するお利行さんな方法を教えていただけませんかね。
それも目的を見失った欠点だらけの方法以外で。
961デフォルトの名無しさん:2012/10/08(月) 20:31:46.57
衝突回避は }
なんでたったこれだけのことがわからないかね
962デフォルトの名無しさん:2012/10/08(月) 20:42:02.28
もともと別物であった名前空間を単一のエイリアスを通じてまとめて扱おうとするから衝突を回避する必要が出ただけだろ?
別々のまま扱えば問題がなかったところにわざわざ問題を発生させる方法こそが目的を見失った欠点だらけの方法じゃないか
963デフォルトの名無しさん:2012/10/08(月) 20:48:49.92
>>962
ローカル変数と同じ話で一時的に省略名が欲しいだけ。
undefで実現できるようなことなんだから大した話じゃないでしょ。

あと、いちいち個別に名前つけたって結局ぶつかるんだから意味無いでしょ。
いずれにせよ一時的につけた名前は不要になったら消さないと衝突を起こす。
尤も、ヘッダーに書くなら完全名を常につけるって手もあるが、冗長な上に読みづらすぎる。
964デフォルトの名無しさん:2012/10/08(月) 20:49:44.27
while(1){
965デフォルトの名無しさん:2012/10/08(月) 20:50:34.76
同じ名前空間で同じ名前を別の物につけたいとかいう時点で
もうマクロでいいだろって気になる
966デフォルトの名無しさん:2012/10/08(月) 21:10:50.43
>>946
>>962
そもそも、大規模開発した事なくて困った経験無いだろ。
複数の外部ライブラリを使い、複数の兄弟関係のヘッダーファイルが現れる状態だと
兄弟関係のヘッダーで名前がぶつかるってのは遅かれ早かれ必ずぶち当たる問題だぞ。
967デフォルトの名無しさん:2012/10/08(月) 21:15:09.74
>>962
エイリアスを使った上で衝突を回避したいのが目的。
エイリアスを使わないんなら、問題回避の目的すら存在してないんで、
そもそも目的からずれてる。というか目的から逃げてる。
968デフォルトの名無しさん:2012/10/08(月) 21:28:45.23
ネバーエンディングすとぉ〜おりぃ〜♪
969デフォルトの名無しさん:2012/10/08(月) 21:29:21.24
>>966
現在のプロジェクトで 600Ks × 4 システム程度の開発してるけど、
そんなことで困ったことはない。

>>967
そもそも楽するためか何か知らないけど、エイリアス使うと問題が
発生するんだから、使わないと言う選択しろよと思う。
970デフォルトの名無しさん:2012/10/08(月) 21:37:53.21
どうせ名前空間すら使わずMFCみたいな命名規則なんだろ
971デフォルトの名無しさん:2012/10/08(月) 21:47:36.27
>>969
少なくともundefを使った場合見た目が悪いだけで問題は起きてない。
代替手段があるなら変えたいけど、現状で問題はない。
問題がないなら楽してもいいでしょ。
もし問題があるというならどういう問題がある?
マクロ使ってることが問題だなんて話はいいから、名前空間を汚染するとか
実際に困る具体的な問題点を指摘して。
972デフォルトの名無しさん:2012/10/08(月) 21:51:53.34
>>969
あなたのプロジェクトじゃどういうふうに名前管理してらっしゃるんですか?
973デフォルトの名無しさん:2012/10/08(月) 22:28:38.03
>>971
問題ないと思ってるなら、そのまま使ってりゃいいじゃん。

自分から >>920 書いといて、
> もし問題があるというならどういう問題がある?
って、頭沸いてるとかしか思えない。

>>972
普通に、モジュールごとに名前空間分けて管理しているだけですよ。
974デフォルトの名無しさん:2012/10/08(月) 22:35:44.81
>>973
>自分から >>920 書いといて、
>> もし問題があるというならどういう問題がある?
>って、頭沸いてるとかしか思えない。

文脈がつながってなくて意味がわからない
975デフォルトの名無しさん:2012/10/08(月) 22:36:22.26
GetExitCodeProcessで取得する値が負の値の場合、結果をうまく取得できないんですけど、どうしたら良いですか?
976デフォルトの名無しさん:2012/10/08(月) 22:38:10.97
こんな調子じゃc++じゃなくても困ってそうね
977デフォルトの名無しさん:2012/10/08(月) 22:41:20.67
>>973
名前空間を作る場合の話じゃなくて参照する場合の話なんですが・・・
A::B::E X(A::B::C::D n, N::L::O k); こういう書き方してるとか
978デフォルトの名無しさん:2012/10/08(月) 22:42:36.94
>>975
こちらへ

Win32API質問箱 Build112
http://toro.2ch.net/test/read.cgi/tech/1349330864/
979デフォルトの名無しさん:2012/10/08(月) 22:49:22.06
元の話題が
>エイリアス系の名前ってどうにか消せないのか?
なんだから、「C++じゃ無理じゃね」
で解決なんでないの…
980デフォルトの名無しさん:2012/10/08(月) 22:52:19.91
>>973
なんとなく>>973の意図を読み取って答えると、
問題ないって言ったのは一時的なエイリアスを使った事に対して。
当初の問題になってるのは、マクロを代替する手段がないかという話で問題点が違う。
981デフォルトの名無しさん:2012/10/08(月) 22:53:48.92
また誤解を生みそうなので訂正
×当初の問題になってるのは、マクロを代替する手段がないかという話で問題点が違う。
○当初の問題になってるのは、エイリアスを削除するのにマクロを代替する手段がないかという話で問題点が違う。
982デフォルトの名無しさん:2012/10/08(月) 22:58:56.57
>>979
了解。
983デフォルトの名無しさん:2012/10/08(月) 23:01:33.51
C#とかだとnamespaceのエイリアス作れるんだっけか
984デフォルトの名無しさん:2012/10/08(月) 23:05:58.58
>>974
ごめん、俺には君に (君のバカさを) 説明する能力がないみたいだ。
まあ、一行目だけ理解してくれればいいよ。

>>977
> A::B::E X(A::B::C::D n, N::L::O k); こういう書き方してるとか

他のモジュールを参照する場合は基本その形。
共有ライブラリと自モジュールは適宜省略するけど。
985デフォルトの名無しさん:2012/10/08(月) 23:12:32.96
馬鹿だアホだ罵倒し始めて説明できないのは甘え
986デフォルトの名無しさん:2012/10/08(月) 23:18:05.70
>>984
>まあ、一行目だけ理解してくれればいいよ。
その一行目で言ってる問題ないことと問題点が違うんだよ。
987デフォルトの名無しさん:2012/10/08(月) 23:27:44.32
>>920 には >>979 で、答えでてるし。
それ以外になんか問題あるのか?
988デフォルトの名無しさん:2012/10/08(月) 23:30:33.87
>>987
ないよ。
あるとすれば、>>984がズレた話題振った挙句、有用な答えもなしにバカ呼ばわりして逃げていったことぐらい。
989デフォルトの名無しさん:2012/10/08(月) 23:38:05.83
> ズレた話題振った

>>920 のこと?
いじめたら、かわいそうだよ (w
990デフォルトの名無しさん:2012/10/09(火) 06:26:20.37
991デフォルトの名無しさん:2012/10/09(火) 09:03:17.98
C++でweak_ptrをintrusiveに実装したいときはどう書けばできますか?
992デフォルトの名無しさん:2012/10/09(火) 11:01:12.23
intの配列をnewしたとき初期化して無いのに中身が0になっていて
バグが発見しにくいのですけど
なんで0になっているんですか?
どうしたらランダムっぽくなるんでしょうか?
993デフォルトの名無しさん:2012/10/09(火) 11:06:03.43
>>992
そもそもそんなデバッグに頼るのが間違い。
どうしてもランダムにしたいなら、そういう処理つきのnewを作ってそれを使え。
994デフォルトの名無しさん:2012/10/09(火) 11:10:25.32
パフォーマンス以外に理由があるかよ
995デフォルトの名無しさん:2012/10/09(火) 11:38:30.39
>>992
仕様だから仕方ない
996デフォルトの名無しさん:2012/10/09(火) 11:42:36.75
いつも0でも、いつも0とは限らないんですよね。
0のものを0で初期化することは
なんか無駄なことしてるようにしかおもえないんですが・・・
997デフォルトの名無しさん:2012/10/09(火) 11:47:29.07
malloc使え
確保した中身がどうなってるかは知らんがな
998デフォルトの名無しさん:2012/10/09(火) 12:34:51.00
大方 new int[10]() とかやって「初期化してないのに!」って騒いでるんだろ
999デフォルトの名無しさん:2012/10/09(火) 12:35:53.23
これって、初期化をし忘れしてないかどうかを検査するために、
ゼロになっているか、それとも適当な数値が入ってるかで調べてるのに、
勝手にゼロが入ってて俺のデバッグ法が使えないじゃん、どうしてよ。

という質問?
1000デフォルトの名無しさん:2012/10/09(火) 12:37:52.11
次スレー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。