C++相談室 part130 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/

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

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/04/19(水) 06:48:25.24ID:1gRwKhTB0
よく話が通じるな
2017/04/19(水) 07:02:34.69ID:pPK7kNhi0
トーシローの考えることなど手に取るように解るだろ
2017/04/19(水) 07:45:25.15ID:CHQbSNlI0
ファンクタってなに?
185デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
垢版 |
2017/04/19(水) 07:58:24.39ID:NVOSG7Tn0
メンバoperator()を持つクラスのインスタンス
2017/04/19(水) 08:01:07.84ID:2ep/ROmVr
というのが185の妄想
2017/04/19(水) 08:10:11.76ID:CJSzniGcM
>>181
なぜ試さない?
188デフォルトの名無しさん (ワッチョイ 2b51-EaKP)
垢版 |
2017/04/19(水) 08:29:27.36ID:NVOSG7Tn0
という妄想を朝から垂れ流す186
189デフォルトの名無しさん (ワッチョイ 0b6a-T+tu)
垢版 |
2017/04/19(水) 09:06:44.93ID:oJjBFOoS0
>>181
templateとファンクタはインライン展開がかなり期待できる手法。
2017/04/19(水) 10:21:17.52ID:TnomPWtQ0
#include "A.h"

class A;
の違いって何でしょうか?
どのように使い分けるのですか?
2017/04/19(水) 10:26:39.57ID:37YtuUfA0
>>187,189
確かに以前違うところで思いっきりインラインされているのを見たから、
実際にはされるのだろうね。
ただ、C++のそういった方向への進化はちょっと嫌いだね。

今現在マクロで書いてるからテンプレートが改行無しのコードになってる。
使い勝手は悪いけど、確実に動くし、インラインだ。
俺の要求としては「テンプレートに演算子を書かせてくれ」これだけだ。

さてC++は何故かこれができない。
とは言え珍しいケースでもないはずだから、実際にはやり方があるはず。
そして聞いてみると、型を作る為にファンクタを作って差し込めばいいと言う。

わざわざ型を作ってコンパイラがインライン化するのを期待しろ?
そりゃ動作だけなら同じだが、ソースが余計に見にくくなる。
今の改行無しのコードと、どっちがマシかと言えば、min/max位なら前者だよ。
だからこれなら今回は見送りだ。

とは言え、巨大なテンプレートになってブレークポインタがないと辛い状況になると、
これまではコピペしてデバッグして上書き、というのをやってた。
これは無駄だなあと思っていたので、
とにかくやり方があるのを教えてもらったのはありがたい。
ただ、この解を一般的に受け付けるC++のコミュニティのノリは俺はちょっと嫌い。
重ねて言うが、普通に演算子書かせてくれよ、と思う。
192デフォルトの名無しさん (スプッッ Sd3f-lyFy)
垢版 |
2017/04/19(水) 10:30:32.85ID:cmg5eKJnd
マクロなんてアホみたいな機能使ってる奴がいまだにいたとは
2017/04/19(水) 10:38:16.72ID:xWugx3VWd
ああ、std::plus とかラムダ式じゃなくて + を指定したいって意味か
2017/04/19(水) 11:18:27.22ID:37YtuUfA0
おー、そういうのがあるんだね。
なるほどそれなら std::rel_ops::operator> を使うべきなのかな?
これが標準なら慣れるしかないけど、何だかなー。

呼び出し時に somefunc<double,std::rel_ops::operator>>
だとminなのかmaxなのか分からない。
今は関数名もsome_max, some_minとかに出来てるんだよね。
2017/04/19(水) 11:29:39.03ID:37YtuUfA0
ちなみに現状はこんなコード

#define FUNC(fname,op) \
template<class T> static T fname(T* ptr, int num){\
T max = *ptr;\
int idx = 1;\
while (idx<num) {\
if (max op ptr[idx]) max = ptr[idx];\
idx++;\
}\
return max;\
}
FUNC(max,<)
FUNC(min,>)
#undef FUNC
196デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
垢版 |
2017/04/19(水) 12:34:12.22ID:q88wQIwA0
std::max_element

お前どこかのスレでbindが遅いとか、質問に答えた相手をアホ呼ばわりしたやつじゃね?
2017/04/19(水) 12:41:12.49ID:CJSzniGcM
>>192
爺なんだろ
関わりあるならともかくないなら放置でいいよ
下手に絡むとマクロの素晴らしさとかをとうとうと語りそうだし
2017/04/19(水) 12:46:19.25ID:37YtuUfA0
>>196
いや、イテレータが欲しい訳じゃない。
上記の例はそれだが、実際はもっと複雑で、最初に言ったように、
走査部分は全く同じで演算子だけ異なる場合、どうするか。

で、どのレスのこと?
2017/04/19(水) 12:50:36.22ID:37YtuUfA0
ちなみにマクロは糞だと思うぞ。
単純置換くらいならいいが、それ以上は訳が分からなくなる。
ただ、演算子を置換したい為にファンクタにしてテンプレートに突っ込むのも同様に糞だと思うぞ。
見て分かりやすいものではないだろ。
200デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
垢版 |
2017/04/19(水) 13:00:01.75ID:q88wQIwA0
>>199
お前は中でファンクターを渡す好きな名前のラッパー関数を定義するという発想もないの?
まさか関数呼び出しコストガーとか言わないよね?
2017/04/19(水) 13:04:45.97ID:Z8YDH0nj0
struct Maxf{
template <typename T>static const T f(const T& a, const T& b){return a>b?a:b;}
};
struct Minf{
template <typename T>static const T f(const T& a, const T& b){return a<b?a:b;}
};

template<class M,typename T >struct Func
{
static const T f(const T* p, int n)
{
T m = p[0];
for(int i = 1 ; i < n ; i++){ m = M::f(m,p[i]);}
return m;
}
};

double a[]={-2,3.14,2.2369,0.};
double maxv = Func<Maxf>::f(a, sizeof(a)/sizeof(a[0]) );

書いといてなんだが、見やすい見にくいの問題なら個人の感想なので好きなようにどうぞとしか
2017/04/19(水) 13:19:37.56ID:37YtuUfA0
>>201
ああなるほど、サンクス。そうすれば外側に名前が見えるのね。
個人的にはちょっと技巧的すぎて嫌いなコードだが、
正直なところ、コピペしてデバッグしてコピペで戻すのもうんざりしてたので、
徐々に慣らしながら使わせてもらうことにするよ。

C++での割と標準的な解決法ってこれなんだよね?
みんながやってるのなら俺も慣れるしかない。
2017/04/19(水) 13:32:04.24ID:q88wQIwA0
>>202

>>201 はまったく標準的ではない。
そんな書き方させる標準ライブラリが一つでもあるか?

http://ideone.com/DLaG5f
これだけの話(わざとmin_elementは使わずに書いてる)
std::max_elementと関数名は勝手に置き換えろ
2017/04/19(水) 14:06:14.80ID:37YtuUfA0
>>203
いやだからイテレータが欲しいんじゃないんだよ。
それって話が余計に膨らんじゃうだろ。

今既に走査するコードはあって、それをテンプレートで置き換えようとしている。
呼んだら結果が返ってくる、それだけの関数なんだよ。
そのマクロを撲滅しようとしている。

イテレータだと外側コンテナに色々付け足しが必要になる。
それをやりたい訳じゃない。
最初から全て標準コンテナを使え、というのならその通りだが、それは別件だ。
今は生配列なんだよ。

とりあえず「型」としてファンクタなり構造体をテンプレートに渡し、
中でそれを使う、というのが一般的で良いんだよな?

それとは別に、走査する部分はイテレータで統一し、
std::max_element等にそれを呼ばせるというのも一つのやり方だよ。
ただこれは今やりたい話じゃない。
つか、イテレータイテレータ言ってるのはJavaだと思っていたが、
C++もイテレータ全盛の世界なのか?
205デフォルトの名無しさん (ワッチョイ 0b75-93S+)
垢版 |
2017/04/19(水) 14:19:56.81ID:q88wQIwA0
>>204
int a[8]={4,-2,4,56,7,8,5,3};
が生配列に見えないの?
const T* a,size_t s
が生ポインタと要素数って解らなかった?
C++どころかC言語すら解ってないんじゃないの?

お前の頭には応用という言葉が無いの?
http://ideone.com/i2h96y
2017/04/19(水) 14:25:44.80ID:15mBJgd3M
イテレータってお前の言ってる走査のシンタックスシュガーやぞ
2017/04/19(水) 14:36:42.93ID:37YtuUfA0
>>205
あーなるほど分かったわ。確かにこれの方が直感的で良いわ。
事実として俺はテンプレートに慣れてないからね。

まあとにかくありがとう。
2017/04/19(水) 16:00:45.80ID:37YtuUfA0
すまんが次の質問。

テンプレート内部で型を決めうちしたいのだが、この書き方ってある?
例えば内部で高精度で演算したい時、引数型が
引数double -> 内部double
引数float -> 内部double
引数short -> 内部int64
とか。引数型に対して内部型は確定的に決まる。

今は
template<typename T, typename Ti> double somefunc(T* src0, T* src1, int t){}
で引数型 T、内部型 Ti としてる。
ただ、これだといちいち呼び出し時に書かないといけない。
単発なのは我慢していたのだけど、リファクタを進めていくと、
上位関数が template<typename T> で済んでいるのに、内部関数が Ti を必要とするから
上位関数も template<typename T, typename Ti> となりだしてちょっとウザくなってきてる。
Ti を何とかして潰せれば呼び出し時にも書かなくて良くなり、全てすっきりするのだが。
2017/04/19(水) 16:07:17.99ID:37YtuUfA0
すまん、ググったら条件分岐がヒットした。
というか2段重ねれば良いだけか?という気がしてきた。
あまり自信はないが。
2017/04/19(水) 16:15:43.91ID:15mBJgd3M
type_traits使う
2017/04/19(水) 16:30:01.80ID:37YtuUfA0
>>210
> type_traits
見た目それようだが、何故かサイズが取れないのね。
ただどのみち俺の環境(VS2008)では使えないようだ。

とはいえ、今回の質問はどうやらラップすれば終わりのようだ。
お騒がせして申し訳ない。
212デフォルトの名無しさん (ワッチョイ 0b75-93S+)
垢版 |
2017/04/19(水) 16:39:33.18ID:q88wQIwA0
>>209
色々方法あるけど

*1 単純にオーバーロードを重ねる

template<typename T, typename Ti> double somefunc_impl(T* src0, T* src1, int t){}

double somefunc(float* src0, float* src1, int t){
return somefunc_impl<float,double>(src0,src1,t);
}

double somefunc(short* src0, short* src1, int t){
return somefunc_impl<short,int64 >(src0,src1,t);
}
double somefunc(double* src0, double* src1, int t){
return somefunc_impl<double,double>(src0,src1,t);
}

*2 trait (somefunc_internal_typeを定義していない型だけ渡すとコンパイルエラー)
template<typename T>struct somefunc_internal_type{};
template<>struct somefunc_internal_type<float>{ using type = double; };
template<>struct somefunc_internal_type<double>{ using type = double; };
template<>struct somefunc_internal_type<short>{ using type = int64_t; };

template<typename T, typename Ti = somefunc_internal_type<T>::type> double somefunc(T* src0, T* src1, int t){}


規則性があるならtraitsはenable_ifとかで少なく書けるが、深入りするとC++の闇にのまれるからおすすめしない
using type = double; を typedef double type; に変えたらたぶんVS2008でも使える
2017/04/19(水) 16:54:59.37ID:37YtuUfA0
>>212
ありがとう。まさに今その1をやったところ。
地味だがこれが一番分かりやすい。
ラップしまくるのは気になるが、C++の世界だとコンパイラが最適化してくれることを期待するんだよな?

traitは後日試してみるわ。本来はそっちの方が本筋なのだろうし。
今回は精度最高型で演算するだけだから規則は簡単。
char, short, int -> int64
float, double -> double
だね。
2017/04/19(水) 17:05:51.26ID:zKKKUYsP0
>>209
俺もパッと思いつくのはenable_if使って2段にすることだな
こんな風に
https://ideone.com/5VIuuw

もっとスマートなやりかたがあったら教えて欲しい
2017/04/19(水) 19:31:59.93ID:suSDkWlT0
>>213
>コンパイラが最適化してくれることを期待するんだよな?
まず試せw
VCで逆アセンブル見るなり
https://gcc.godbolt.org/#
↑これで見るなり

厳密には知らんが、関数テンプレートは大体inlineつけなくても最適化でインライン展開の対象になる
2017/04/19(水) 19:52:27.59ID:37YtuUfA0
>>215
まあそうなんだけど、今回については
・仮に遅くなったとしてもやる
・最終的にはアセンブラに差し替える
という、主に編集上の都合なのでどの道やるんだわ。
最悪、手でコピペして展開すれば直結出来ると分かっているから、その辺は安心。

テンプレート慣れしてないから、いちいちラップするのが気持ち悪いが、
そんなもんだというのなら慣れるしかない。
ただやっぱ、見た目直感的なコードではなくなるのが残念なところ。
varにしたら自動的にテンプレートになって、
文句がある場合のみ手動で特殊化が一番助かるんだが。
2017/04/19(水) 21:04:11.42ID:15mBJgd3M
>>216
>varにしたら自動的にテンプレートになって、
>文句がある場合のみ手動で特殊化が一番助かるんだが。

いやそれがtraitsなんだけど…
2017/04/19(水) 21:47:13.23ID:37YtuUfA0
>>217
いやあれ属性でやろうとしてるでしょ。
普通に型名で書いた方が楽だよね。特殊化みたいに。
変に汎用化させようとして、余計に分かりにくくなってるよ。

なんつーか、C++ってそっちの傾向あるでしょ。変に技巧に凝りすぎというか。
テンプレートにしても、編集上の努力であって、新機能追加やバグ取りにはならないし。
努力の方向を間違えたら完全に空回りてしまう。
varで書かせてくれよとマジで思うよ。
2017/04/19(水) 22:18:24.03ID:15mBJgd3M
varと書けるようにするとなぜ新機能開発やバグ取りにできるの??
templateで何ができないと言ってるのかまじで意味わからん

templateをマクロと同じように使おうとしかしてないから編集上の機能に見えるだけでしょ?
ランタイムのオーバーヘッドをなくすために使うんだよ普通は
てか属性でやろうとしてるってなんだよ、現行C++にattributeなんてねーよクソカス

高精度型にキャストしたいならtraitsとdispatch用の関数書くだけ
2017/04/19(水) 22:29:39.45ID:suSDkWlT0
>>218
言いたいことはわからんでもないけどな
他人はどうか知らんが、自分はSTLやboostのコードを分かりやすいとは全く思わん
ヘッダで公開してるから(そうせざるを得ないんだが)アレを全員目指すべきと勘違いしてる人はいるかもしれんw

言ってしまえば、テンプレートで設計の幅広げたり高速化したり、ってのはあくまで副産物的に生まれたトリックに過ぎんし
そういうライブラリはきちんとドキュメントが存在しないと使い物にならん(あれば超便利なんだが)

そもそもほぼC++しかやってないのでvarが何なのかよーわからんが。
関数型言語みたいな記述力を求めてんのかね?
2017/04/19(水) 22:39:24.29ID:37YtuUfA0
>>219
templateを使わずに同じ事を実現出来る環境なら、
その時間を新機能追加やバグ取りに使えるって事だよ。
実際、JavaScriptとかはそうなんだよ。
ただし、あっちには別の問題があるのだけどね。
222デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
垢版 |
2017/04/19(水) 22:50:14.02ID:q88wQIwA0
でたJavascript
やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か。
2017/04/19(水) 22:52:18.87ID:1eYI3Ipd0
あーあいつか
あの時も意味不明なこといいまくってたな…
もうC++は諦めろ
2017/04/19(水) 22:54:45.80ID:suSDkWlT0
>やっぱりstd::bindは高機能すぎるからオーバーヘッドが有るとか言ってた奴か
これがマジなら
>ID:37YtuUfA0
マジで実測する癖つけた方がいいよ・・・・・w
速度に関して憶測でモノ言うのは話にならん・・・・
2017/04/19(水) 22:56:23.35ID:5KqdfKh3p
常軌を逸してる
触ってしまってすみませんでした
2017/04/19(水) 22:57:53.67ID:37YtuUfA0
>>220
varは何でも突っ込める。(というより型がない)
理論的には、全ての変数を「別々に」テンプレート化しているのと同じ事になる。
だから、理論的にJavaScriptにはテンプレートが必要ない。
(あるけどあれはHTML生成用の別物であって、C++のテンプレートとは違う)

例えば、maxがあったとして、
C++:
double max (double x, double y){ return (x>y)? x : y;}
JavaScript
function max(x,y){ return (x>y)? x : y;}
なんだけど、これはC++的には
template <typename Tx, typename Ty, typename Tr> Tr max(Tx x, Ty y){ return (x>y)? x : y;}
と同じ意味になる。
こんなデタラメで良いのか?と思うけど、
実際、コードの大半はデタラメで良いから、
常に完全フルチューンマニュアル走行のC++はオーバースペックなんだよね。
手抜きで良いところはもっと手抜きしたい。

テンプレートは道路整備に近いから、ライブラリを作っている人はガンガン使うべきだけど、
それぞれの単独アプリで濫用すると空回り感が酷い。
とは言え、それを理由にデタラメにやってきたからいよいよ見にくくなってリファクタしてるんだけど。

ちなみに関数型(キリッの連中は多分勘違いしている。関数型が既述能力が特に高いわけではない。
というか、C++で出来ない既述は基本的にないと思う。
ただし、書きやすいかと言われれば、全く酷いけど、C++のコミュニティってかなり厨二で、
そういうのもC++の魅力だ!と言いきっている感がある。
いや勘弁してください、ってことで。
2017/04/19(水) 23:05:48.45ID:37YtuUfA0
>>224
コンパイラが最適化してくれるからいい、のではなくて、
コンパイラが最適化しなくても速いコードを最初から書こうとしているって事だよ。

ただしC++ではそれが出来ないが、
そもそもコンパイラが最適化してくれるから問題ないってノリでしょ。
ここら辺はスタイルの違いだと思うよ。
228デフォルトの名無しさん (ワッチョイ 0b75-7bPG)
垢版 |
2017/04/19(水) 23:07:23.43ID:q88wQIwA0
>>224
俺も憶測で決めつけてるけどね。
でもこの書きっぷりと応用性のなさ。Javascriptときたからもうあいつにしか見えない。
2017/04/19(水) 23:11:15.73ID:cDK+jlin0
何故気に入らないのにC++を使おうとするんだ
RustとかSwiftのような新しい言語の方がきれいに安全に書けるぞ
2017/04/19(水) 23:12:32.75ID:9cOcPQsOM
template <typename T> T max(T a, T b) { return x > y ? x : y; }
だろ?馬鹿?

しかもjavascriptのvariant型なんてc++でいうとこのvoid*型だろ?
使うたびに内部ではdowncastしてるはずなのにそのオーバーヘッドコストは気にならないのか?
2017/04/19(水) 23:14:03.78ID:1eYI3Ipd0
>>229
RustもSwiftも強い静的型付けだから、型システムがわかってないこいつにはC++同様使えない
2017/04/19(水) 23:28:44.31ID:1gRwKhTB0
テンプレートだと指が勝手にユニバーサル参照にしてしまう
2017/04/19(水) 23:53:27.98ID:5Pu3YB5qr
>>219
>現行C++にattributeなんてねーよ
何故か規格を読まない奴ほど自信満々に嘘をつく法則
2017/04/20(木) 00:12:38.85ID:tHs+CIU3r
>template <typename T> T max(T a, T b) { return x > y ? x : y; }
>だろ?馬鹿?

>>226の説明が理解できなかった自分の方が馬鹿だった
という事実に230が気付くことは無いだろう
2017/04/20(木) 00:17:15.41ID:4toBdd3vM
いやお前だよ…
236デフォルトの名無しさん (ワッチョイ 1f8f-AhUp)
垢版 |
2017/04/20(木) 05:55:38.33ID:dzDslOc/0
js訛りのC++か
気がつくとぼっちだぜ
んなキモいことしてっと
2017/04/20(木) 06:46:57.40ID:4gdppVlz0
そういやC++のきれいなコードあんまり見たことない
2017/04/20(木) 12:06:51.73ID:nHxDShTLd
俺のコードはスカスカで綺麗だぜ!
2017/04/20(木) 16:31:13.15ID:dSLwtaqZ0
         ,,-―--、
        |:::::::::::::;;;ノ
        |::::::::::( 」
        ノノノ ヽ_l
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |
2017/04/20(木) 16:39:26.78ID:pGeg/NAi0
俺のコードにはファウンデーションを丹念に塗ってある
2017/04/20(木) 21:34:46.16ID:iTkbXITvr
>>232
ユニバーサル参照にするとどういう制限が発生するのか分かった上でやっているのか?
2017/04/20(木) 21:45:04.01ID:OBF/5/VT0
>>240
MFCとか綺麗だよねw
2017/04/20(木) 22:40:39.82ID:16AwdhdC0
>>241
はて?制限・・・そんなのあったっけ?
(あわててEMC++をめくりながら)
2017/04/21(金) 14:01:58.43ID:jq02h6/Cr
Effective Modern C++のItem 30を読まなくても幾つかは日常的に気付きそうなものだが
struct A { constexpr static int N = 1'000; };

f_pass_by_value(A::N); // OK
f_pass_by_universal_ref(A::N); // NG
245デフォルトの名無しさん (ワッチョイ a375-OSeR)
垢版 |
2017/04/21(金) 14:33:26.68ID:SD7KIjS10
>>244
それ -std=c++1z で通るのな。規格変わったん?
2017/04/21(金) 14:40:59.59ID:jq02h6/Cr
>>245
変わる予定
流石にC++14の言語仕様はクソだった
N4659 D.1山椒
2017/04/21(金) 14:43:15.61ID:jq02h6/Cr
だがこれはC++17でも通らない
struct A { int b : 2; };
f_pass_by_ref( A{}.b );
2017/04/21(金) 14:47:58.15ID:uAFMuOM4d
クソザコなので日常的には何も気付かない
2017/04/23(日) 11:36:55.65ID:onWybp6E0
質問
std::map<key_t, int>にkey_t型のブツの個数を格納したいのですが、どう書くのがSTL的に推奨?
仮に
typedef std::map<key_t, value_t> dic_t;
dic_t dic;
key_t key;
であるとして、
(1) std::pair<dic_t::iterator, bool> result = dic.insert(dic_t::value_type(key, 1));
  if (!result.second) { result.first->second++; }
(2) dic_t::iterator it = dic.find(key);
  if (it == dic.end()) { dic[key] = 1; } else { it->second++; }
(3) その他

みたいな?
2017/04/23(日) 11:40:30.73ID:onWybp6E0
補足>>249
>ブツの個数を格納したい
というのは、keyの出現も個数もわからない状態から、key出現毎に数えていきたいという意味です
251デフォルトの名無しさん (ワッチョイ 2756-2VNN)
垢版 |
2017/04/23(日) 11:58:50.37ID:VmCxZvh+0
std::map::size で取得
2017/04/23(日) 12:31:44.54ID:XHzgUmp00
>>249
++dic[key];
2017/04/23(日) 13:01:20.45ID:E5WPNsUIr
質問者の日本語がクソだと251のようなレスがついてしまっても仕方ない
2017/04/23(日) 13:59:45.57ID:onWybp6E0
>>252
ゆ、許された…!
255デフォルトの名無しさん (ワッチョイ 0b00-amNx)
垢版 |
2017/04/23(日) 21:33:17.66ID:+WngXvwH0
よくわかんないけどmax_elementでゲッツした数字をインクレメントしてそいつをキーにすればいいなじゃないか?
2017/04/23(日) 22:33:59.07ID:W0RIoSIf0
からのターン
2017/04/25(火) 01:55:12.08ID:2owVuizj0
fopen()を使う場合は、

shared_ptr<FILE> fp( fopen( "ファイルパス", "r" ), fclose );

と書けるんですが、
fopen_sのように、戻り値でFILE*を取得できない場合は、shared_ptrにできないんでしょうか?
258デフォルトの名無しさん (ワッチョイ 0b00-amNx)
垢版 |
2017/04/25(火) 02:09:15.69ID:L5bW9/iP0
ステップ1:shared_ptr<FILE> fp( [] { FILE* fp; fopen_s( &fp, "ファイルパス", "r" ); return fp; }(), fclose() );
ステップ2:おわり

マックはかんたんなんだ。
2017/04/25(火) 07:41:45.06ID:2owVuizj0
>>258
おおお、なるほど!ラムダ式が使えるんですね!
おかげさまでうまくいきました!
この方法なら、shared_ptr化できる対象がさらに増やせますね。

どうもありがとうございました!
2017/04/25(火) 08:33:19.57ID:OEZA+HZE0
クラス化したほうがいいよ
2017/04/25(火) 09:08:54.62ID:qHdDYIsy0
>>258
最初にNULL入れておかんと未定義になるかもでよ
2017/04/25(火) 14:04:32.36ID:o5+7I7e76
超初心者です。

Ptr<Hoge> abc::createHoge()
abc::Hoge::do()

すると、
静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります
と言われました。
Hogeのdoを使うにはどうすればいいですか?
2017/04/25(火) 14:18:34.30ID:P05pQrZGM
>>262
Ptr<Hoge> p = abc::createHoge();
p->do();
あとは初心者スレに行くべし
2017/04/25(火) 14:28:56.92ID:o5+7I7e76
できました!ありがとうございます
265デフォルトの名無しさん (スップ Sd4a-Et+B)
垢版 |
2017/04/25(火) 14:33:18.17ID:Z7zV+yycd
いえいえどういたしまして
2017/04/25(火) 22:33:09.32ID:ggixqTU6r
>>261
他人をおとしいれるのがそんな楽しいのか?
267デフォルトの名無しさん (ワンミングク MMfa-OSeR)
垢版 |
2017/04/25(火) 23:25:19.17ID:xMNxUhiOM
>>266
そんな事で陥れられるの?生きていくの大変そうだね。
2017/04/25(火) 23:34:24.96ID:9Zr4ftW/0
>>266
単なる勘違いとか無知とかかもしれないのに、なんでそんなに悪意に満ちた解釈をするのだろう。
それに、その書き込みで誰かが陥れられるというなら、攻撃するより先にその誰かを助けてあげる書き込みをする方がいいんでないか?
2017/04/25(火) 23:34:51.11ID:oTWBT7hM0
std::shared_ptr<T>::get()
2017/04/26(水) 00:03:07.94ID:/Py/BDPD0
ステップ1:shared_ptr<FILE> fp( [] { FILE* fp=0←ココ; fopen_s( &fp, "ファイルパス", "r" ); return fp; }(), fclose() );
ステップ2:おわり
271デフォルトの名無しさん (ワッチョイ 0b00-amNx)
垢版 |
2017/04/26(水) 01:30:30.17ID:zA6HVqFs0
止めて!私のことで争わないで
272ich1 (アウアウウー Sacf-CGRX)
垢版 |
2017/04/26(水) 07:22:16.30ID:KcpaNie5a
https://goo.gl/Y4tSAe
これは嘘でしょ?
本当なら落ち込むわ。。
2017/04/26(水) 08:02:32.64ID:jkGhVm4nr
>>268
>助けてあげる書き込みをする方がいいんでないか?
>>261さえ無ければ質問者は幸せになれるのだから、質問者がリファレンスを見直せば一瞬でわかるような内容は
「アホに惑わされず一読したままの解釈で正しい」ことだけフォローすれば十分ではないか
2017/04/26(水) 17:54:18.88ID:BTdjOnYo0
http://andriasang.com/com8ig/mt_framework/images/21dxs/full.jpg
http://game.watch.impress.co.jp/img/gmw/docs/608/483/pan_02.jpg
http://game.watch.impress.co.jp/img/gmw/docs/608/483/pan_03.jpg

こういうGUIって、どうやって作るんでしょうか?
Win32APIで頑張れば作れるんでしょうか?
それとも、ライブラリが売られたりしているんでしょうか??
2017/04/26(水) 18:00:10.68ID:/Py/BDPD0
TVTestのソースが参考になる
2017/04/26(水) 20:24:27.91ID:5Saru3KQ0
もちろん作れる
自分でレンダリングしなきゃいけないしテクスチャも描かないといけないけど
2017/04/28(金) 01:35:45.00ID:0T/EiQwUp
こういうの作るならQtとか使いたくなる
278デフォルトの名無しさん (ワッチョイ 7b75-Eih5)
垢版 |
2017/04/28(金) 09:33:31.10ID:UVvcEOOo0
>>273
質問者がリファレンスを見直せば一瞬でわかるような内容なら別にフォローの必要もないだろ。
調べないような奴なら安全な方に倒れていた方が良い。無駄でもたいしたコストではない。
よって >>261のせいで質問者が不幸せになるという根拠が無い
2017/04/28(金) 09:48:07.09ID:mPeDNIgc0
横だけど >>274 のGUIって Qt? GTK+?
Linuxに引っ越ししようと思っているんだが、GUIツールにどれを選択しようか悩み中。

昨今のマイクロソフトはファック過ぎる、二度と使う事は無いと思っていたC++に戻る事になりそうだ。
2017/04/28(金) 12:15:44.81ID:4D2iUcPod
こういうGUIって、C#で簡単に組めたりするのかな?
2017/04/28(金) 12:46:51.26ID:mPeDNIgc0
>>280
こういうデザインにしたいと思うなら困難だと思う
結構オリジナリティーあるパーツだし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況