[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/27 11:54 / Filesize : 299 KB / Number-of Response : 1021
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part155



1 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 12:07:15.39 ID:R+oM8cup.net]
※前スレ
C++相談室 part154
https://mevius.5ch.net/test/read.cgi/tech/1610096040/

テンプレここまで

118 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 17:08:29.35 ID:mAZMW+WU.net]
 auto cmpFunc3 = [&](int idx, const SomeBigObject& xx)->bool{ return arr[idx] < xx; }
 auto i = std::lower_bound(indices.begin(), indices.end(), x, cmpFunc3);
arr[*i];
じゃあこれで

119 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 18:31:21.10 ID:rUOwZVXJ.net]
>>117
ムリス、

つか次のように死ぬほど腐った書き方をしたらとりあえずできるた、
/// 間接ソート版lower_bound
int custom_lower_bound(const std::vector<SomeBigObj>& arr, std::vector<int>& indices, const SomeBigObj& x)
{
 // SomeBigObjの間接ソート用比較関数
 // xのコピーを避けるため[&](a, b)とする。
 auto cmpFunc = [&](const int a, const int b)->bool {
  // 有り得ないindex値が渡ってきたらxとみなす。
  const SomeBigObj& obj1 = (a < 0) ? x : arr[a];
  const SomeBigObj& obj2 = (b < 0) ? x : arr[b];
  return (obj1 < obj2);
 };
 // lower_bound()の第3引数(検索キー)を有り得ないindex値にしておく。
 auto found_it = std::lower_bound(indices.begin(), indices.end(), -1, cmpFunc);
 // Indexに変換
 return (int)std::distance(indices.begin(), found_it);
}

動作するサンプル例:
https://ideone.com/xbSHmi

120 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 00:39:13.23 ID:C05ugDVV.net]
const int lb = std::distance(indices.begin(),std::partition_point(indices.begin(), indices.end(), [&x,&arr](const int i){ return arr[i] < x; }));
これでどうかな?

121 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 01:13:46.41 ID:B+YGKOyD.net]
>>115
エピさんかしらん

122 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 01:17:07.25 ID:KcAzRCeR.net]
>>118
動くってば
ideone.com/v9R75s

123 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 05:42:50.50 ID:FlnHFJBF.net]
>>121
しらそん
おま環

124 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 06:26:08.77 ID:hpqJGpH8.net]
>>122
動かないのをおま環言うのはよく聞くがその逆を聞いたのはこれが初めてかも

125 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 07:24:58.99 ID:FlnHFJBF.net]
確かに動いているように見えるが(呼び出し回数も2分探索相当に見えるが)
Compにそんな引数渡して委員会?!
錯覚じゃないの;;;

126 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 08:00:02.53 ID:FlnHFJBF.net]
std::lower_bound(first last, value, comp);
という呼び出しにおいて、compはcomp((firstやlastと同じ型のiteratorが指す要素), value)
という呼び出され方しかされないこと、および
valueの型はfirstやlastが指す要素の型とま無関係に好きな型にして良いと規格で決まっている?!



127 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 09:20:20.01 ID:F9L3hm15.net]
チラッと規格見た限り
value は first、last と無関係でいいし
comp の第一引数はfirst、lastのiteratorが指す型で、第二引数はvalueの型に決まっているように見える

128 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 12:44:59.78 ID:94shRdbf.net]
>>51じゃないが、オブジェクト指向で設計する意味が分からなくなった
汎用性の高いフリー関数が沢山あればそれで良いじゃん

129 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:37:37.40 ID:2guWvkPP.net]
>>126
> comp の第一引数はfirst、lastのiteratorが指す型で、第二引数はvalueの型に決まっているように見える
そこは決まってないと思う。

130 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:42:26.98 ID:2guWvkPP.net]
・・・いや、 lower_bound() 限定なら引数の順番もその想定でいいのか。
upper_bound() だと comp(value, x) になったりするから、交換可能にしとくのがいいけど、
片方だけ使うなら交換可能にする必要はない、と。

131 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:44:08.41 ID:2guWvkPP.net]
参照: https://timsong-cpp.github.io/cppwp/n4861/alg.binary.search

132 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:45:24.56 ID:x8RK+cZQ.net]
>>128
requiresのとこは見た?

133 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 17:04:44.94 ID:x8RK+cZQ.net]
c++20からprecond

134 名前:itionsって書き方に変わったのか。

>>129
upper_boundのpreconditionsには第一引数がvalueのほうしか書いてないよ
[]
[ここ壊れてます]

135 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 06:24:25.70 ID:ByNsu0yr.net]
質問者ですレスdクス、
>>117の書き方で>>121が正しく動いているように見えるのは未定義動作でなくてSTLの仕様ってことでFA?
>>126>>129のような巧妙っていやー巧妙だが風が吹いたら桶屋が儲かるみたいなかりにくい仕掛けなのは
ステパノフあたりの発案なんですかね……

136 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 10:00:06.97 ID:b/WIqkut.net]
>>132
あ、ごめん。比較関数の引数順を交換可能にするのは lower_bound, upper_bound 両用にすることを想定しての話。



137 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:09:17.02 ID:uZSkMyuO.net]
生魚にあたって、
入院した病院の天井みながらSTL考えてたもんな

138 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 16:25:55.36 ID:/Z+9yHN3.net]
ステパノフ?

139 名前:デフォルトの名無しさん mailto:sage [2021/04/08(木) 23:02:01.67 ID:6aXKgzGP.net]
ニダーランが終了になるそうだ
もう糞スレは立てにくくなるな
ざまあ

140 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 01:15:08.43 ID:iqXbiQSS.net]
>>135
STLなんてかっこつけたネーミングだけど
やってることはリニアサーチwww

141 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:44:34.26 ID:B1MFSAev.net]
C++11でのstd::swapは、次のようなコードになっているそうですが、
仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに
nullptr的なものが代入されるんでしょうか。
仮にt1のポインタ的なメンバにnullptr的なものが代入されない場合、
(2)でt1への代入に置いて何が起きるのか心配です。
質問の仕方を変えるならば、
share_ptrは参照カウンタ方式ですのでカウンタのアップ/ダウンは正確でなければ
なりませんが、以下の例では、いったいどの行のどの演算子(またはどの部分)で
カウントアップ/カウントダウンされるんでしょうか。

template<typename T> void swap(T& t1, T& t2) {
 T temp = std::move(t1); // (1), or T temp(std::move(t1));
 t1 = std::move(t2);   // (2)
 t2 = std::move(temp);  // (3)
}

142 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:45:42.89 ID:B1MFSAev.net]
>>139
誤:仮に、もし(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに
  nullptr的なものが代入されるんでしょうか。
正:(1)が終わった直後にt1の中のポインタ型やshared_ptr<A>のメンバに
  nullptr的なものが代入されるんでしょうか。

143 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:58:14.49 ID:O38yN+C3.net]
>>138
C++03にもstd::binary_searchあるぞ

144 名前:はちみつ餃子 mailto:sage [2021/04/09(金) 12:00:21.75 ID:foJJo5gI.net]
>>139
> nullptr的なものが代入されるんでしょうか。

この場合はされる。
ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、
標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり
メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。

> いったいどの行のどの演算子(またはどの部分)で
> カウントアップ/カウントダウンされるんでしょうか。

= がその役割を持っている。
ムーブコンストラクタとムーブ代入演算子によってカウントされる。

145 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:02:12.29 ID:B1MFSAev.net]
>>140
どうやら、
(1) の中央の = では、TからTへの move-construc

146 名前:torが呼び出され、
(2)や(3) の中央の = では、TからTへの move-assignment operatorが呼び出される、
ということのようですが、
Tのmove-contructorやmove-assingment operatorは、ユーザーの実装次第で、
ユーザーがそれらを明示的に書かなかった場合の「デフォルトの定義」は
現在もまだ論争中で、標準的な仕様が決まってない、ということらしいですね。
間違っていれば指摘してください。
[]
[ここ壊れてます]



147 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:11:46.34 ID:fGHst4+7.net]
>>141
そんなのも、ちょっとc\c++をかじったことあるなら
誰でも書けるじゃん
わざわざ誰が書いたかわからないようなものより自作できるなら自作するだろ

148 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:20:57.67 ID:QYkH8yRN.net]
>>143
以下のサイトによれば、「標準的な仕様は決まっている」ようです:
drafet C++11 standareのsection 12.8のparagraph 15に
implicitly-defined copy/move constructor は、
「a memberwise copy/move of its bases and members」
であると書いてあるそうですから:

https://stackoverflow.com/questions/18290523/is-a-default-move-constructor-equivalent-to-a-member-wise-move-constructor


The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move of its bases and members. [ Note: brace-or-equal-initializers of non-static data members are ignored. See also the example in 12.6.2. —end note ] The order of initialization is the same as the order of initialization of bases and members in a user-defined constructor (see 12.6.2). Let x be either the parameter of the constructor or, for the move constructor, an xvalue referring to the parameter. Each base or non-static data member is copied/moved in the manner appropriate to its type:

if the member is an array, each element is direct-initialized with the corresponding subobject of x;
if a member m has rvalue reference type T&&, it is direct-initialized with static_cast(x.m);
otherwise, the base or member is direct-initialized with the corresponding base or member of x.
Virtual base class subobjects shall be initialized only once by the implicitly-defined copy/move constructor (see 12.6.2).

149 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:39:59.46 ID:QYkH8yRN.net]
>>142
>ムーブセマンティクス一般においてはムーブ後の抜け殻は「無効なオブジェクト」なのでアクセスに対して保証がないことがあるが、
>標準ライブラリのスマートポインタについては所有権を移動させた後にそれが空であり
>メンバ関数 get で nullptr が返ることも、 nullptr と == で比較して真であることも保証される。

なるほど。
行(1)の場合、
1. 右辺でstd::move()をt1に行った段階では(実行段階で)マシン語は全く実行されない。
2. 中央の = は、move-constructor と解釈され、Tのmove-constructorが呼び出される。
3. Tの暗黙定義のmove-constructorは、メンバ同士のmove-construcotrなので、
 メンバに shared_ptr<A> a があると、shared_ptr<A>のmoveコンストラクタが呼び出される。
 そして、shared_ptr<A>のmoveコンストラクタは、実行後に「src側(from側)」をnullptr相当の
 状態にしてしまう。

ということのようですね。

150 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:42:08.46 ID:QYkH8yRN.net]
>>146
逆に言えば、Tのメンバに、A *pA; のような生ポインタがあると、
Tの暗黙のmoveコンストラクタ/move代入演算子では、恐らく、
「src側(from側)」にはnullptrが代入されない(??)ので、非常に困った
問題を招くかも知れないと?

151 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:44:10.41 ID:QYkH8yRN.net]
>>147
Tのデストラクタに
if ( pA != nullptr ) {
 delete pA;
}
などと書いていた場合、問題を生じそうですね。

152 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 12:45:44.21 ID:iOouO9yu.net]
生ポ入りクラスに暗黙move関数定義できたっけ?

153 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 18:46:49.83 ID:WYvZUx+H.net]
c++についてうんちく垂れるやつに限って仕事ができない
そんなうんちくどうでもいいから、さっさと作れよって思われてる先輩いるわ

154 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 19:06:14.56 ID:PF0aPDJN.net]
>>150
プログラマは怠惰であれ、を地で行ってるんだろう

155 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 19:55:10.43 ID:O38yN+C3.net]
>>144
> わざわざ誰が書いたかわからないようなものより自作できるなら自作するだろ

おまえは一生二度とライブラリもOSも使うな
ベアメタルだけで食っていけ

それができたら、おまえに付いてくる者たちが顕れるだろう
できなければ人知れず消えるだけだ

どうなりたいかは、お前の人生だ
俺がどうしろとは言えない

156 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 20:38:18.09 ID:8YMfBGcF.net]
>>150
またお前か。さっさとプログラミング覚えろよ



157 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:03:48.36 ID:mQjFjskh.net]
std::binary_search()は戻り値とかなんとboolや
こんなのよかちゃんと位置を返してくれるstd::lower_bound()の方がよっぽど使いでがある
ちなstd::lower_bound()が2分探索か線形探索かは使うイテレータの条件次第

158 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:08:01.53 ID:mQjFjskh.net]
std::lower_bound()が線形探索だと断言してくださる香ばしいblogも世の中にはあるが
https://rsk0315.hatenablog.com/entry/2019/09/10/173708

これがまつがいであることは比較関数の中でprintf()でもしたらたちどころにワカル

159 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 23:29:26.43 ID:mQjFjskh.net]
ゴメソリンク先は必ずしも断言はしていなくって、std::set<T>にstd::lower_bound()を適用する例か、
これのイテレータはrandom-access iteratorでないから確かに線形探索になる

160 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 02:28:09.12 ID:+Yr/nSyJ.net]
>>144
こういうのが井の中の蛙ってのだな
蛙くん

161 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 13:02:03.74 ID:62UJIlpX.net]
>>149
生ポインタのメンバ変数がある場合で、デストラクタで>>148のように
書いている場合は、暗黙のmove関数は自動定義されないようです。
なぜなら、暗黙のmove関数は、デストラクタがユーザー定義されている
場合には自動定義されないためです。
他にも、コピーコンストラクタ、コピー代入演算子、move代入演算子
がユーザー定義されている場合も、暗黙のmove関数は自動定義されない
そうです。

162 名前:デフォルトの名無しさん mailto:sage [2021/04/10(土) 13:04:24.60 ID:ziRUnSTY.net]
>>158
誤:暗黙のmove関数
正:暗黙のmove-コンストラクタ

163 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 21:20:47.36 ID:aRgjPq06.net]
コンパイラはともかくリンカに計算負担をかけるのはバカな設計だなと思うわ。

164 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 21:31:53.64 ID:X3ahc6YE.net]
>>160 何の設計の話?

165 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 22:03:18.21 ID:oDlLzjRc.net]
暗黙のmoveがnullptr代入してくれないとか生ポあるクラスに暗黙のctor定義してくれるのか、とか
学ぶ順番間違えて勘違いしてるやつ上の方にいるけど
そもそも生ポの扱いに言語が介入するんならdtorでdeleteしてくれるのか、とか考えつかないのかね・・

166 名前:デフォルトの名無しさん mailto:sage [2021/04/11(日) 22:28:21.28 ID:AbYQFAoI.net]
質問者はポインタ型とshared_ptrについて聞いてたのに、shared_ptrのことしか答えなかった餃子が悪い。
謝れ!俺に



167 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 13:47:17.66 ID:SAslKmLH.net]
指定ソフトのFWを許可するAPI教えてくださいよ

168 名前:はちみつ餃子 mailto:sage [2021/04/12(月) 15:59:50.47 ID:8pnQviW4.net]
そうか。

169 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 18:14:36.03 ID:jbHGiSQO.net]
皆さま御機嫌よう、ちょっと質問させてください

class hogeの内部でenum class fugaを定義し、
そのfugaをclass hogehoge でメンバ変数として使用したいのですが、
hogehoge のヘッダーにはなるべくhoge をインクルードさせたくありません。
もちろんfuga変数はヘッダーに置いて使用したいのですが

170 名前:c…
前方宣言でfugaを宣言してもhoge::fugaと互換?が無いため代入が出来ません。
キャストで戻したりして使っているのですがこれならintでもいいかなと……
クラス内クラスの前方宣言は難しいのでしょうか?
何か方法がありましたら教えていただきたく……

class hoge{
enum class fuga{
one,two,three,SUM
};
};

//ヘッダーはソースにインクルードしたい
class hogehoge{
hoge::fuga mfuga;
};
こんかかんじで使いたいのですがエラーになってしまいsまずorz
[]
[ここ壊れてます]

171 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 18:58:57.80 ID:jbHGiSQO.net]
enum classはグローバルに置いた方がいいんでしょうか?
任意のクラス内部で規定したいenumが見た目も便利だと思ったのでなるべく入れ子にしたかったのですが

172 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:30:43.48 ID:e7ZnlCa0.net]
>>167
hoge をインクルードしないところで hoge::fuga を使いたいということは
fuga は hoge にそれほど強く結びついていないということで、外に出すのが妥当なのでは?

外に置いたうえで hoge 内で using fuga = outer_fuga とでもすれば、見た目は損なわれないだろうし。

173 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:43:07.58 ID:jbHGiSQO.net]
>>168
名前に「ホゲで使うフガ」と名付けるのがいいですかね?
前方宣言で定義したクラスは不完全型みたいでクラス内クラスにアクセスする場合は別途定義が必要みたいです……
難しい感じですかね

174 名前:デフォルトの名無しさん mailto:sage [2021/04/12(月) 19:43:19.37 ID:jbHGiSQO.net]
ありがとうございました

175 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:17:47.93 ID:CekyfU50.net]
std::sortがセーフソートかどうかって決まってないんですね?

176 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:20:46.00 ID:dUpGrFVX.net]
セーフソートとは何なのか、決まってないですね。



177 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 19:49:36.98 ID:3ATJKALM.net]
安定ソートのことならstd::stable_sortを使え

178 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:39:25.63 ID:E/HY6RLS.net]
std::stable_sort<T>はどうしてもstd::sort<T>より遅い
からstd::stable_sort<T>で安定ソートするテクニックが存在するし需要がある

179 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:57:29.81 ID:E/HY6RLS.net]
もちろんタダでというわけにはいかずn個のTのソーティングに対しn個の整数型の配列が別途必要だがとにかくできる

180 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:58:57.72 ID:E/HY6RLS.net]
まつがえたorz
誤: std::stable_sort<T>
正: std::sort<T>

181 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:07:31.95 ID:E/HY6RLS.net]
計算量の仕様からすると何だかんだ言って
std::stable_sort<T>の中身はマージソートで、
std::sort<T>の中身はイントロソートとクイックセレクトとクイックソートの複合技
ぐらいしかありえない

182 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 21:10:52.16 ID:CekyfU50.net]
みなさんありがとうございます
安定ソートのことでした

183 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 05:40:12.90 ID:OwJGUJdo.net]
> std::stable_sort<T>の中身はマージソートで、

これはまあそんなもうだろうけど

> std::sort<T>の中身はイントロソートとクイックセレクトとクイックソートの複合技

なんでここまで限定するんだ?

184 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 06:51:50.47 ID:1+2DD+HN.net]
https://cpprefjp.github.io/reference/algorithm/sort.html
>C++11以降: O(N log N) (N == last - first) 計算量での比較
>クイックソートは平均計算量がO(N Log N)だが、最悪計算量がO(n^2)である。そのため、C++03の計算量要件には合致するが、C++11の要件には合致しない

185 名前:デフォルトの名無しさん [2021/04/14(水) 06:52:54.28 ID:mDTOVFC3.net]
ubuntuでの開発環境って何があるんでしょうか?
openglなのでc++を使うことになると思うんですが、c++はideとしてvscodeでいいですよね
guiは何が一般的なんでしょうか?

186 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:20:31.68 ID:OwJGUJdo.net]
> この関数には、特定のアルゴリズムで実装すべきという規定はない



187 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:23:57.67 ID:OwJGUJdo.net]
古典的なソート議論はユニプロセッサ前提
今どきの並列化の流れに必ずしも当てはまるとは思えない

188 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 07:27:25.07 ID:B6LD9tEC.net]
boost::sort

189 名前:::pdqsort(), boost::sort::block_indirect_sort() あたりならヘッダーだけで並列ソートできる []
[ここ壊れてます]

190 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 09:23:48.49 ID:hYFflu6b.net]
>>181
GUIなんか使わないのが一般的だよ
開発環境にわざわざC++とLinuxを選ぶような人は自分用アプリにGUIなんて組み込まないだろうし、
他人に使わせるならどうせWindowsでテストしなきゃいけないからLinuxなんて時間の無駄だ
OpenGLだったらOpenGLの描画結果を表示するウィンドウとターミナルでいい

191 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 10:52:22.55 ID:OwJGUJdo.net]
自分用アプリねえ
俺の定規ウインドウなんてGUIだけど

192 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 11:09:58.93 ID:lMgtIJ1Q.net]
定規ww

193 名前:デフォルトの名無しさん [2021/04/14(水) 12:59:06.52 ID:mDTOVFC3.net]
>>185

qtですか?

194 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 16:06:34.29 ID:qBzPSYhh.net]
定規がとても気になる

195 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 16:25:09.90 ID:qBzPSYhh.net]
ぐぐったら沢山出てきた

頭が悪くて理解出来ないけど需要あるんだね

196 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 17:07:15.14 ID:X49CrYgb.net]
unique_ptr<hoge> 自体が型名なんでしょうか?
class unique_ptr<hoge>で前方宣言してもいいのかな?



197 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:15:29.38 ID:OwJGUJdo.net]
明示的な具現のつもりなら構文が違うね

198 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:22:49.87 ID:X49CrYgb.net]
素人なんで自分の説明が難あると思うんだけど自分なりに精一杯説明すると、
ヘッダー部の引数にclass unique-ptr<hoge>& uhogeを載せて、
ソース部にhoge.hをインクルードして定義する感じでつかいたんだけども……
試してみたけど動くんだけどなんか怖い
想像ではunique-ptr<class hoge>が前方宣言だと思ってたもので……
どこをどう調べればいいのかだけでも教えていただければ……

199 名前:はちみつ餃子 mailto:sage [2021/04/14(水) 18:34:21.63 ID:VF/LllcQ.net]
>>191
テンプレートのインスタンス化は暗黙にやってくれるので基本的にはする必要がない。
どうしても宣言したいのなら
extern class unique_ptr<hoge>;
と書くことは可能。

ただし、このように宣言した場合には暗黙のインスタンス化は抑制されるので、
別の場所で明示的インスタンス化をしておく必要がある。

テンプレートの展開はその仕組み上、各翻訳単位ごとにやった上でリンク時に統合されるというクソみたいなことになってるので、
コンパイル時間を抑制したいなどの理由でこういった変なことになってる。

200 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:51:48.53 ID:X49CrYgb.net]
ユニークポインタ自体の大きさが、ポインタだから4バイトくらいに統一されているのかな?
型テンプレートがどんな型でも、定義部分で明示してあればポインタ長のメモリをアロケートされているから、宣言自体はある程度の許容範囲があるということなのかな?
理解が違ってたらすいません

201 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:01:58.75 ID:IrZTmcl1.net]
>>191
1行目yes
2行目はその場合クラステンプレートの明示的実体化になる

前方宣言の場合は
template <class T, class D>
class unique_ptr;
(もちろん名前空間std内
テンプレートは引数与えられてない限りあくまでテンプレートであってコードは生成されないよ

>>194
え、明示的インスタンス化しておけばコンパイル時間抑制できるの?

202 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 19:39:51.01 ID:udtyfuhd.net]
前方宣言というのはあくまで「こういう名前のこういう奴が(どっかに)いますよ」って言ってるだけ
実体がどんなサイズでどんな値やメンバやなんやかんやを持ってるかとかには関知しない

203 名前:はちみつ餃子 mailto:sage [2021/04/14(水) 21:35:38.45 ID:VF/LllcQ.net]
>>196
> 明示的インスタンス化しておけばコンパイル時間抑制できるの?

ちがうちがう。
extern のほう (宣言) が暗黙のインスタンス化を抑制するからコンパイル時間が短縮されることが期待できる。
でも、インスタンス化を抑制するんだからどこか別の翻訳単位に実体が存在する必要はあって、
それに明示的インスタンス化を使えるようになってるって話。

204 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:23:18.21 ID:IrZTmcl1.net]
あーなるほどね、thx

205 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 22:43:29.65 ID:B6LD9tEC.net]
今時コンパイル時間を稼ぐとかどうなの

206 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 23:07:25.20 ID:IrZTmcl1.net]
リッチにテンプレート使いまくって一本ソフト書いてみ
まぁわかりやすいのはspiritとかのET使ったやつ、それを複数のソースファイルで使いまくればわかる
さらに言えば自分でそういうライブラリ書いて少しの変更でほぼフルビルドかかるのを体験すればわかるやろ



207 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:02:44.73 ID:5MHywbxF.net]
>>200
今時コンパイル時間を気にしないほうが頭悪いわ。

208 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:26:49.07 ID:daBkAWQM.net]
いまいちメタプの必要性が理解できん
コンパイル時に決定してる値しか計算できないんでしょ
3の階乗は計算できるけど、ユーザーから入力された値の階乗は計算出来ないって・・・
だったらはなから6ってハードコーディングしとけ

209 名前:はちみつ餃子 mailto:sage [2021/04/15(木) 00:38:40.10 ID:FEj8Wx1j.net]
>>203
抽象化の手段でもある。
脳内で計算できる程度のものであっても、
ちゃんと名前が付いた関数になってるほうが
読むほうにとってはありがたいもんだよ。

210 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:54:46.36 ID:3EsQmY5s.net]
>>203
こういう書き方出来たら便利なのにな、とかを無理矢理実現できるというロマンはある
(マクロと似たようなもんだが
プロパティみたいなことも一応出来るし
ただまぁ・・・労力に見合うか、というと散々だわマジで。

持て囃すようなものでは決してない(他人のふんどしでドヤりたい連中が持て囃してるだけ

211 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 00:59:45.76 ID:5MHywbxF.net]
>>203
まあ実際ビルドシステムを自分で構築するかコンパイラにやらせるかの違いしかない。
フーリエ変換の係数みたいなものを事前に設定するとかは少し便利かもね。
それなりに手計算すると大変だけれどそこまで本格的に計算時間がかからないような
事前計算できて使いまわせるようなものが念頭にあるんだろうが、まあそんなないわな。

212 名前:はちみつ餃子 mailto:sage [2021/04/15(木) 01:11:57.17 ID:FEj8Wx1j.net]
状況に応じてコードジェネレータを用意するよりはマシってくらいか。

213 名前:デフォルトの名無しさん mailto:sage [2021/04/15(木) 22:12:02.69 ID:mdNAsIkh.net]
>>182
具体的に

214 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 05:29:55.48 ID:EjuTOEDD.net]
>>208


215 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 06:24:07.51 ID:zpAq69hN.net]
>>209
?!

216 名前:はちみつ餃子 mailto:sage [2021/04/16(金) 12:18:05.12 ID:I3AyWR5p.net]
ヴィクトル・ユーゴーかよ。



217 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:00:06.17 ID:1dxAtZcl.net]
condition_variableってなんでこんなに面倒なんだ
winなら、イベントの方が高速だし楽で懐疑起床も起きないし

218 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 08:06:00.96 ID:3mxJ/fRx.net]
>>212
特定変数に依存しないbool条件式で起床できるのはWindowsのイベントよりも楽で応用が利く
今さらイベントには戻れない便利さがある






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<299KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef