C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
探検
C++相談室 part149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/18(火) 06:19:41.54ID:xvjipUWj681デフォルトの名無しさん
2020/03/06(金) 02:13:52.12ID:trP/ijr0 >>680
頭がおかしいね、あなた。
頭がおかしいね、あなた。
682デフォルトの名無しさん
2020/03/06(金) 02:18:58.34ID:8Rm5TWXP 知らなくて驚くかもしれないけど、32bitのシステムでも64bit整数は使えるんだよ
683デフォルトの名無しさん
2020/03/06(金) 02:27:44.01ID:P6VjmRBF 64ビットは不要とか言っちゃう奴がC++の仕様に文句言うとかないわw
684デフォルトの名無しさん
2020/03/06(金) 02:31:48.79ID:trP/ijr0 ハード屋が単に食い扶持確保のために用意しただけのものを勝手に意味があると思い込んでいる馬鹿な人達。
685デフォルトの名無しさん
2020/03/06(金) 02:59:03.29ID:8Rm5TWXP >>684
純粋な疑問なんだけど、あなたは4294967295を超える整数を扱う必要がある時にはどうするの?
純粋な疑問なんだけど、あなたは4294967295を超える整数を扱う必要がある時にはどうするの?
686デフォルトの名無しさん
2020/03/06(金) 04:22:51.72ID:89RQTO1C 構造体を使います。
687デフォルトの名無しさん
2020/03/06(金) 04:28:44.87ID:89RQTO1C 構造体を知らない人が64ビット言ってるんだと思います。
688デフォルトの名無しさん
2020/03/06(金) 04:29:16.89ID:8Rm5TWXP なるほどね
センス悪いねあんた
センス悪いねあんた
689デフォルトの名無しさん
2020/03/06(金) 04:32:38.83ID:89RQTO1C 何のセンスだ。
690デフォルトの名無しさん
2020/03/06(金) 04:35:36.86ID:8Rm5TWXP 仕事のセンスだよ
じゃあ構造体使って1兆÷7を計算するコード書いてみてよ
64bit整数を使えば「100000000000ULL/7」だけで済むものを
どれだけ面倒で下らないコードで水増しして生産性下げてチームに迷惑かけてるのか興味あるからさ
じゃあ構造体使って1兆÷7を計算するコード書いてみてよ
64bit整数を使えば「100000000000ULL/7」だけで済むものを
どれだけ面倒で下らないコードで水増しして生産性下げてチームに迷惑かけてるのか興味あるからさ
691デフォルトの名無しさん
2020/03/06(金) 04:43:17.56ID:3vh2YYy0 64bit機のNintendo64は32bit機のプレステ1に負けたよね。商業的に。
692デフォルトの名無しさん
2020/03/06(金) 04:53:21.52ID:89RQTO1C >>690
構造体知らんの?
構造体知らんの?
693デフォルトの名無しさん
2020/03/06(金) 04:56:22.47ID:8Rm5TWXP 知らないから君の最強の多倍長整数64bit計算を見せてよ
694デフォルトの名無しさん
2020/03/06(金) 05:00:24.98ID:89RQTO1C 構造体学んでからもう一度質問してください。
695デフォルトの名無しさん
2020/03/06(金) 05:04:01.70ID:8Rm5TWXP というか構造体じゃなくて配列でいいよね
uint32_t trillion[2] = {232, 3567587328};
を7で割るコードを見せてください
64bit整数の割り算をわざわざ多倍長整数でやるなんてそんな無意味なコード書いたこともないから知らないんだよね
見本見せてよ
「100000000000ULL/7」よりもずっと優れてるんでしょ?
uint32_t trillion[2] = {232, 3567587328};
を7で割るコードを見せてください
64bit整数の割り算をわざわざ多倍長整数でやるなんてそんな無意味なコード書いたこともないから知らないんだよね
見本見せてよ
「100000000000ULL/7」よりもずっと優れてるんでしょ?
696デフォルトの名無しさん
2020/03/06(金) 05:06:27.71ID:89RQTO1C 構造体を学んでください。
いま素晴らしいアドバイスを与えましたよ?
いま素晴らしいアドバイスを与えましたよ?
697デフォルトの名無しさん
2020/03/06(金) 05:12:53.95ID:8Rm5TWXP じゃあ構造体でいいよ
struct Int64 {uint32_t high, low;};
Int64 trillion = {232, 3567587328};
さっさと7で割れや
逃げるのか?
struct Int64 {uint32_t high, low;};
Int64 trillion = {232, 3567587328};
さっさと7で割れや
逃げるのか?
698デフォルトの名無しさん
2020/03/06(金) 05:14:40.27ID:89RQTO1C いや全然ダメ。
構造体の何たるかが全然わかっていない。
まともな師匠に師事して学ぶべきです。
構造体の何たるかが全然わかっていない。
まともな師匠に師事して学ぶべきです。
699デフォルトの名無しさん
2020/03/06(金) 05:29:10.46ID:8Rm5TWXP しょうがねえな
多倍長の除算を書くのが面倒なんだったら、>>695>>697にはわざと32bit環境での多倍長演算には適さない
問題のある表現使ってやったからそのことを指摘するだけでもいいよ
それすら出来ないならお前こそまともな師匠に師事して出直してこい
多倍長の除算を書くのが面倒なんだったら、>>695>>697にはわざと32bit環境での多倍長演算には適さない
問題のある表現使ってやったからそのことを指摘するだけでもいいよ
それすら出来ないならお前こそまともな師匠に師事して出直してこい
700デフォルトの名無しさん
2020/03/06(金) 06:26:13.08ID:89RQTO1C むしろ16ビットで十分だけどな。
701デフォルトの名無しさん
2020/03/06(金) 06:41:40.07ID:8Rm5TWXP え、マジ?>>695>>697の何がダメか本当にわかんないの?
相手して損した
相手して損した
702デフォルトの名無しさん
2020/03/06(金) 07:17:23.58ID:89RQTO1C 構造体を知らないものが64ビットを愛好するということが分かった。
703デフォルトの名無しさん
2020/03/06(金) 07:25:27.16ID:hYOq9QPM >>661
R"..." はいわゆる生文字リテラルでWindowsのファイルパスとか正規表現文字列を書き易くするための機能やね
ただ無駄に高機能で
R"***(文字列中)")***" ⇒ 文字列中)"
なんてのも指定できるけど個人的にはやりすぎとしか思えない
https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
R"..." はいわゆる生文字リテラルでWindowsのファイルパスとか正規表現文字列を書き易くするための機能やね
ただ無駄に高機能で
R"***(文字列中)")***" ⇒ 文字列中)"
なんてのも指定できるけど個人的にはやりすぎとしか思えない
https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
704デフォルトの名無しさん
2020/03/06(金) 08:24:11.44ID:7d5kGJiP そもそも暗号系扱うならそんな長さじゃ全然足らんしね。
構造体構造体言ってる奴もそれわかってなさそうだが。
構造体構造体言ってる奴もそれわかってなさそうだが。
705デフォルトの名無しさん
2020/03/06(金) 08:42:39.21ID:89RQTO1C 暗号系はHaskell一択でしょ。
706デフォルトの名無しさん
2020/03/06(金) 10:08:00.27ID:mgb6nXCA プログラムが実際にかかった時間とCPU時間の2つを最後に表示させるのに何か関数用意されてますか?
clock()はCPU時間だけですよね?
clock()はCPU時間だけですよね?
707デフォルトの名無しさん
2020/03/06(金) 10:13:22.05ID:u9hNYNKX708デフォルトの名無しさん
2020/03/06(金) 10:23:16.85ID:u9hNYNKX709デフォルトの名無しさん
2020/03/06(金) 10:25:39.21ID:u9hNYNKX710デフォルトの名無しさん
2020/03/06(金) 10:33:59.25ID:hYOq9QPM711デフォルトの名無しさん
2020/03/06(金) 10:43:29.63ID:u9hNYNKX712デフォルトの名無しさん
2020/03/06(金) 10:46:24.85ID:u9hNYNKX いや問題はダブルクォーテンションか
そこは訂正
そこは訂正
713デフォルトの名無しさん
2020/03/06(金) 12:26:06.89ID:hYOq9QPM >>711-712
> 閉じカッコを含められない制限に何か合理性ある?
生文字列中にダブルクォーテーションを含めたい機会がどんだけあるんだ?
って話な
Pythonなら R"ABC" "¥"" "def" ってやるだけ(R'ABC"DEF' でもいいけど両方含む場合はとか言い出すだろうからw)
C# なら @"ABC""DEF" でできる
> ptyonだってトリプルクォートとかrawとか建て増しになってとっちらかってるわけで
トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
> 閉じカッコを含められない制限に何か合理性ある?
生文字列中にダブルクォーテーションを含めたい機会がどんだけあるんだ?
って話な
Pythonなら R"ABC" "¥"" "def" ってやるだけ(R'ABC"DEF' でもいいけど両方含む場合はとか言い出すだろうからw)
C# なら @"ABC""DEF" でできる
> ptyonだってトリプルクォートとかrawとか建て増しになってとっちらかってるわけで
トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
714デフォルトの名無しさん
2020/03/06(金) 12:31:07.14ID:1NgZSMCO ダブルクォート含みのCSVとかをパースするための正規表現書く時とかいくらでもあるけど
raw文字列ってそういう時のための物じゃないの?
raw文字列ってそういう時のための物じゃないの?
715デフォルトの名無しさん
2020/03/06(金) 13:57:40.15ID:u9hNYNKX >>713
> トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
それこそお前の感想だよね?w
役割が違う言えば聞こえがいいが、pythonの文字列リテラルは機能の直行性もない短絡的な設計
rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
でそういうのが欲しいケースはいくらでもある
JSONを文字列で埋め込んでおきたい場合とかね
c++のrawは建て増しなのは同じだけど設計の筋は通ってる
ただもう一歩がんばってindent合わせが可能な仕様にしてほしかったな
> トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
それこそお前の感想だよね?w
役割が違う言えば聞こえがいいが、pythonの文字列リテラルは機能の直行性もない短絡的な設計
rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
でそういうのが欲しいケースはいくらでもある
JSONを文字列で埋め込んでおきたい場合とかね
c++のrawは建て増しなのは同じだけど設計の筋は通ってる
ただもう一歩がんばってindent合わせが可能な仕様にしてほしかったな
716デフォルトの名無しさん
2020/03/06(金) 13:59:12.86ID:ytQa5naT >Pythonなら R"ABC" "¥"" "def" ってやるだけ
rawの意味ねぇなww
rawの意味ねぇなww
717デフォルトの名無しさん
2020/03/06(金) 14:24:22.40ID:trP/ijr0718デフォルトの名無しさん
2020/03/06(金) 14:28:35.64ID:trP/ijr0 >>717
それから、本当に桁数の多い数の割り算計算が本質的に必要な場合は多倍長計算ライブラリを使えばいい。
多くのアプリではそういう状況が少ないと言うことだ。
科学技術計算では、doubleか、4倍精度float数を扱えればいいので、64BIT整数が必要な場面は今のところ少ない。
メッシュの個数やループ回数が32BITを超えるようなものは、今のCPUでは重過ぎて普通、計算できない。
それから、本当に桁数の多い数の割り算計算が本質的に必要な場合は多倍長計算ライブラリを使えばいい。
多くのアプリではそういう状況が少ないと言うことだ。
科学技術計算では、doubleか、4倍精度float数を扱えればいいので、64BIT整数が必要な場面は今のところ少ない。
メッシュの個数やループ回数が32BITを超えるようなものは、今のCPUでは重過ぎて普通、計算できない。
719デフォルトの名無しさん
2020/03/06(金) 14:38:19.40ID:2gPy1GFt720デフォルトの名無しさん
2020/03/06(金) 14:41:03.85ID:hYOq9QPM >>715
> rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
まさかと思うがトリプルクォートとRaw文字列を組合せて使えることも知らんのか?
そんな知識で直行性とか語るなよw
> rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
まさかと思うがトリプルクォートとRaw文字列を組合せて使えることも知らんのか?
そんな知識で直行性とか語るなよw
721デフォルトの名無しさん
2020/03/06(金) 14:45:21.47ID:hYOq9QPM722デフォルトの名無しさん
2020/03/06(金) 14:45:22.11ID:gkPkCuAw 業界全体の傾向では「printfへの回帰」が見られる
fmtはprintfの21世紀型強化版として捉える
つまり、+や<<で連結するのはどの言語でも煩わしかった
だからprintf(のようなもの)に戻ってきている
CUIやテキストへの出力はprintf程度で充分だった、と誰もが気付いた
fmtはprintfの21世紀型強化版として捉える
つまり、+や<<で連結するのはどの言語でも煩わしかった
だからprintf(のようなもの)に戻ってきている
CUIやテキストへの出力はprintf程度で充分だった、と誰もが気付いた
723デフォルトの名無しさん
2020/03/06(金) 14:45:35.04ID:2gPy1GFt 複数行できるぞ
std::cout << R"(abc)"
R"(def)"
"\nghi" << std::endl;
しかもエスケープあり/なしを途中で切り替えることまでできる
std::cout << R"(abc)"
R"(def)"
"\nghi" << std::endl;
しかもエスケープあり/なしを途中で切り替えることまでできる
724デフォルトの名無しさん
2020/03/06(金) 14:53:31.38ID:89RQTO1C 普通は16ビットあれば十分ですよ。
64ビット厨はプログラムしたことあるの?
64ビット厨はプログラムしたことあるの?
725デフォルトの名無しさん
2020/03/06(金) 15:11:10.95ID:/2BnMzJ+ ポインタ使えないだろ
726デフォルトの名無しさん
2020/03/06(金) 15:34:10.40ID:1NgZSMCO >>718
へー
お前の世界の普通の会計ソフトは43億円を扱えないし
お前の世界の普通の防犯カメラは43億ミリ秒(たった5日)連続稼働したら落ちるし
お前の世界の普通のOSは4GBのファイルを作れないのか
アホくさ
へー
お前の世界の普通の会計ソフトは43億円を扱えないし
お前の世界の普通の防犯カメラは43億ミリ秒(たった5日)連続稼働したら落ちるし
お前の世界の普通のOSは4GBのファイルを作れないのか
アホくさ
727デフォルトの名無しさん
2020/03/06(金) 15:56:44.11ID:trP/ijr0 >>726
16BIT時代から一兆円は扱えた。
Z80 はマシン語としては整数の掛け算/割り算も浮動小数点も全くサポートしてなかったが、BASIC言語ではどれも普通に出来た。
同様に、32BIT CPUでも、64BIT整数が扱えないわけではない。
16BIT時代から一兆円は扱えた。
Z80 はマシン語としては整数の掛け算/割り算も浮動小数点も全くサポートしてなかったが、BASIC言語ではどれも普通に出来た。
同様に、32BIT CPUでも、64BIT整数が扱えないわけではない。
728デフォルトの名無しさん
2020/03/06(金) 16:00:14.00ID:89RQTO1C intは16ビットが正解。
729デフォルトの名無しさん
2020/03/06(金) 16:03:04.34ID:u9hNYNKX730デフォルトの名無しさん
2020/03/06(金) 16:40:55.40ID:7d5kGJiP pythonは文字列まわりがとっちらかって結局2と3で分裂したが。
731デフォルトの名無しさん
2020/03/06(金) 17:14:18.31ID:1NgZSMCO python2で混乱してたのはraw周りじゃないぞ
文字列の文法は3でもほとんど変わってないはず
strとunicodeとbyte(に相当するもの)の扱いがナイーブ過ぎてグッチャグチャだったのがpython2の大問題
文字列の文法は3でもほとんど変わってないはず
strとunicodeとbyte(に相当するもの)の扱いがナイーブ過ぎてグッチャグチャだったのがpython2の大問題
732デフォルトの名無しさん
2020/03/06(金) 18:10:29.44ID:k+5uYmSv >>729
pythonでも"と'を同時に使わない限り何でもかけるじゃん。
一方、c++は)"という並びを文字列中にかけない制限があるわけなんで、
もちろん後者のほうか確率は低いけど、pythonを一方的に機能不全と言えるほどじゃないなー
pythonでも"と'を同時に使わない限り何でもかけるじゃん。
一方、c++は)"という並びを文字列中にかけない制限があるわけなんで、
もちろん後者のほうか確率は低いけど、pythonを一方的に機能不全と言えるほどじゃないなー
733デフォルトの名無しさん
2020/03/06(金) 18:15:02.80ID:2gPy1GFt734デフォルトの名無しさん
2020/03/06(金) 18:26:07.10ID:k+5uYmSv >>733
回線切って吊ってくる
回線切って吊ってくる
>>718
>多倍長計算ライブラリ
GMP が有名どころではありますが、GPL なのが嫌ですね
そういう人のために、かなり遅いのですけれども https://mevius.5ch.net/test/read.cgi/tech/1434079972/51 を公開していますので、よろしければ使ってください
>多倍長計算ライブラリ
GMP が有名どころではありますが、GPL なのが嫌ですね
そういう人のために、かなり遅いのですけれども https://mevius.5ch.net/test/read.cgi/tech/1434079972/51 を公開していますので、よろしければ使ってください
736デフォルトの名無しさん
2020/03/06(金) 20:27:49.81ID:hYOq9QPM737デフォルトの名無しさん
2020/03/06(金) 21:30:02.51ID:ytQa5naT やりたくない奴はやらなきゃいいだけ
この機能はあった方がいい
ないとrawから離れてしまうのは君自身が>713で例示している
この機能はあった方がいい
ないとrawから離れてしまうのは君自身が>713で例示している
738デフォルトの名無しさん
2020/03/06(金) 22:02:29.04ID:Oq5LDxMU739デフォルトの名無しさん
2020/03/07(土) 00:05:13.96ID:aYdkWxa2 >>51
We regret to inform you that we are shutting down code.hackerearth.com.
Apologies for any inconvenience caused.
Thank you for understanding.
We regret to inform you that we are shutting down code.hackerearth.com.
Apologies for any inconvenience caused.
Thank you for understanding.
740デフォルトの名無しさん
2020/03/07(土) 01:02:00.91ID:aYdkWxa2 >>740
それは https://code.hackerearth.com の今のメッセージですね、サーバーシャットダウン中でごめんなさい、ですか
ではこちらをみてください https://code.hackerearth.com/11eea6E>>740
それは https://code.hackerearth.com の今のメッセージですね、サーバーシャットダウン中でごめんなさい、ですか
ではこちらをみてください https://code.hackerearth.com/11eea6E>>740
742デフォルトの名無しさん
2020/03/07(土) 01:33:50.20ID:aYdkWxa2 >>742
申し訳ございません、コードを ideone に張ったものと記憶違いをしていました
>>735 より前のバージョンを https://mevius.5ch.net/test/read.cgi/tech/1434079972/37 に置いています
申し訳ございません、コードを ideone に張ったものと記憶違いをしていました
>>735 より前のバージョンを https://mevius.5ch.net/test/read.cgi/tech/1434079972/37 に置いています
744デフォルトの名無しさん
2020/03/07(土) 07:24:46.08ID:HWBpZxET >>729
> ただやはりpythonはエスケープフリーで任意の文字を含められない点で機能が不完全
だから前にも書いたけどそんな機会がどんだけあるんだよって話な
ぱっと思いつくのは " や ' を含む正規表現を書きたい時ぐらいだけど毎回そんなものを書かないだろ
めったに無い時のために毎回無駄な ( ) を書かされるのはちょっと嫌
※ 最後の行は個人の見解です
> ただやはりpythonはエスケープフリーで任意の文字を含められない点で機能が不完全
だから前にも書いたけどそんな機会がどんだけあるんだよって話な
ぱっと思いつくのは " や ' を含む正規表現を書きたい時ぐらいだけど毎回そんなものを書かないだろ
めったに無い時のために毎回無駄な ( ) を書かされるのはちょっと嫌
※ 最後の行は個人の見解です
745デフォルトの名無しさん
2020/03/07(土) 08:46:17.40ID:CT6knIM5 すみません、教えてください
JAVAだとinterfaceを定義してsetListner的なことが出来て、リスナー不要なときはnullを指定できます。
C++だとどうかけばいいでしょうか?
interface用のクラスを一つ用意してvirtualメソッドを並べれば出来そうな気がしますが、リスナー不要な時に上位からnullを指定できない気がしていて
JAVAだとinterfaceを定義してsetListner的なことが出来て、リスナー不要なときはnullを指定できます。
C++だとどうかけばいいでしょうか?
interface用のクラスを一つ用意してvirtualメソッドを並べれば出来そうな気がしますが、リスナー不要な時に上位からnullを指定できない気がしていて
746デフォルトの名無しさん
2020/03/07(土) 09:53:24.66ID:iUAwzQ87 std::functionが一番簡単だと思いますが。
747デフォルトの名無しさん
2020/03/07(土) 10:21:48.59ID:CT6knIM5 ありがとうございます。
具体的なコードを教えて頂けないでしょうか?
例えば、適当に拾った以下のJavaコードを例にして同じ事を出来るとC++のサンプルを教えて頂けると参考になります。
続く
具体的なコードを教えて頂けないでしょうか?
例えば、適当に拾った以下のJavaコードを例にして同じ事を出来るとC++のサンプルを教えて頂けると参考になります。
続く
748デフォルトの名無しさん
2020/03/07(土) 10:21:58.29ID:CT6knIM5 class HeavyTask {
private TestListener listener;
// interface 設定
interface TestListener {
void onSuccess(int result);
}
// listener
void setListener(TestListener listener) {
this.listener = listener;
}
void taskStart() {
int sum = 1;
int i= 0;
for ( ; i< 20; ){
sum += sum;
i++;
}
if(listener != null) {
// 計算が終わったら結果をlistenerに渡す
listener.onSuccess(sum);
}
}
}
private TestListener listener;
// interface 設定
interface TestListener {
void onSuccess(int result);
}
// listener
void setListener(TestListener listener) {
this.listener = listener;
}
void taskStart() {
int sum = 1;
int i= 0;
for ( ; i< 20; ){
sum += sum;
i++;
}
if(listener != null) {
// 計算が終わったら結果をlistenerに渡す
listener.onSuccess(sum);
}
}
}
749デフォルトの名無しさん
2020/03/07(土) 11:01:38.19ID:iUAwzQ87 え?めんどくさいですが?
750デフォルトの名無しさん
2020/03/07(土) 11:04:48.12ID:CT6knIM5 すみません、簡単な例でいいので、リスナー登録してそこから複数のメソッドがイベント毎に呼ばれるようにする方法がしりたいです。。
751デフォルトの名無しさん
2020/03/07(土) 11:09:04.29ID:iUAwzQ87 std::functionは関数っぽいものなら何でも突っ込めるので、好きなようにお使いくださいとしか。
本当は出来ないんだろ?とか煽ればだれか書いてくれるかも。
本当は出来ないんだろ?とか煽ればだれか書いてくれるかも。
752デフォルトの名無しさん
2020/03/07(土) 11:13:54.29ID:CT6knIM5 まだイメージが沸かないですよね。。使い方も
753デフォルトの名無しさん
2020/03/07(土) 11:20:59.13ID:NiWYPfBM 最初に自分がいってるとおりじゃないんか
インターフェイスの派生クラスのポインタ渡せばいいだけで
不要なら0入れて呼ぶときにチェックするだけじゃないの
インターフェイスの派生クラスのポインタ渡せばいいだけで
不要なら0入れて呼ぶときにチェックするだけじゃないの
754デフォルトの名無しさん
2020/03/07(土) 11:27:48.77ID:AiHnVJpq てか、C++でもほとんど>>748と同じようなコードになるだろ
755デフォルトの名無しさん
2020/03/07(土) 12:03:07.45ID:CT6knIM5 具体的にfuntionを使って、リスナーをnewして呼び出すあたりとかコードがみたいです。。virtualだと誰かが継承してクラス化しないとだめですよね?
Javaのように、setListenerの引数にリスナーだけnewしてしていとか、null指定とかする方法がやっぱりよくわからないです。
Javaのように、setListenerの引数にリスナーだけnewしてしていとか、null指定とかする方法がやっぱりよくわからないです。
756デフォルトの名無しさん
2020/03/07(土) 12:05:29.33ID:qpmtEUNF そのjava版晒せば変換してやるが
757デフォルトの名無しさん
2020/03/07(土) 12:06:49.73ID:CT6knIM5 ちょっとまってください
758デフォルトの名無しさん
2020/03/07(土) 12:07:03.25ID:NiWYPfBM クラス化してポインタで管理するだけ
javaみたくnewでそのままオーバーライドはできないと思う
やりようあるんかな
javaみたくnewでそのままオーバーライドはできないと思う
やりようあるんかな
759デフォルトの名無しさん
2020/03/07(土) 12:10:36.55ID:NiWYPfBM newしてラムダ式でも渡せばできるか
760デフォルトの名無しさん
2020/03/07(土) 12:12:57.85ID:qpmtEUNF new要らんのでは?
761デフォルトの名無しさん
2020/03/07(土) 12:21:54.31ID:CT6knIM5 すみませんが、これでお願いします。
C++のfunctionを利用して、一番スマートな感じなコードを教えてください。
m(__)m
続く↓
C++のfunctionを利用して、一番スマートな感じなコードを教えてください。
m(__)m
続く↓
762デフォルトの名無しさん
2020/03/07(土) 12:22:53.25ID:CT6knIM5 // 上位からやりたいこと
class Main {
Test test = new Test();
test.setListener(null); // callback不要な時はnullを指定したい
// callbackが欲しい時はこんな感じで登録したい
test.setListener(new Test.TestListener() {
@Override
onSuccess(int result) {
System.out.println(result);
}
@Override
onError(int errorCode) {
System.out.println(errorCode);
}
});
test.run();
}
続く↓
class Main {
Test test = new Test();
test.setListener(null); // callback不要な時はnullを指定したい
// callbackが欲しい時はこんな感じで登録したい
test.setListener(new Test.TestListener() {
@Override
onSuccess(int result) {
System.out.println(result);
}
@Override
onError(int errorCode) {
System.out.println(errorCode);
}
});
test.run();
}
続く↓
763デフォルトの名無しさん
2020/03/07(土) 12:23:36.37ID:CT6knIM5 // Testの中身の作りはどうでもいいです。
// Main側からTest側が綺麗に呼び出せれば、それに合わせてTest側を作りかえるでOKです。
class Test {
interface TestListener {
void onSuccess(int result);
void onError(int errorCode);
}
private TestListener listener;
void setListener(TestListener listener) {
this.listener = listener;
}
void run() {
if (listener != null) {
listener.onSuccess(0);
listener.onError(1);
}
}
}
// Main側からTest側が綺麗に呼び出せれば、それに合わせてTest側を作りかえるでOKです。
class Test {
interface TestListener {
void onSuccess(int result);
void onError(int errorCode);
}
private TestListener listener;
void setListener(TestListener listener) {
this.listener = listener;
}
void run() {
if (listener != null) {
listener.onSuccess(0);
listener.onError(1);
}
}
}
764デフォルトの名無しさん
2020/03/07(土) 12:24:15.53ID:CT6knIM5 スペースがちゃんと入ってなく、見づらくて申し訳ないです。
よろしくお願いしますm(__)m
よろしくお願いしますm(__)m
765デフォルトの名無しさん
2020/03/07(土) 12:37:30.49ID:+VsyTV1D こんな自分でやる気のない人にはぜひエサを与えないでほしい。
766デフォルトの名無しさん
2020/03/07(土) 12:39:57.68ID:iUAwzQ87 いや、困ってるみたいだし、書いてやれよ。
俺がケチョンケチョンに添削してやるから。
俺がケチョンケチョンに添削してやるから。
767デフォルトの名無しさん
2020/03/07(土) 12:40:37.61ID:CT6knIM5 やる気がないわけではなくて、勉強しているけどどう書くのか分からないだけです。。
768デフォルトの名無しさん
2020/03/07(土) 12:45:37.23ID:CT6knIM5 C++だと、イメージだけど
test.setListener([](int result)) { print(result); });
みたいにかけそうってのはわかりましたが。。
NULL指定したい時とか複数のoverride対象の
メソッドを並べる書き方とか良く分からず。
test.setListener([](int result)) { print(result); });
みたいにかけそうってのはわかりましたが。。
NULL指定したい時とか複数のoverride対象の
メソッドを並べる書き方とか良く分からず。
769蟻人間 ◆T6xkBnTXz7B0
2020/03/07(土) 13:05:14.05ID:ECZE2b67 class TestListener {
public:
virtual void onSuccess(int result) { }
virtual void onError(int errorCode) { }
};
public:
virtual void onSuccess(int result) { }
virtual void onError(int errorCode) { }
};
770蟻人間 ◆T6xkBnTXz7B0
2020/03/07(土) 13:09:06.48ID:ECZE2b67 class Test {
private:
TestListener *m_listener;
public:
Test() : m_listener(NULL) { }
void setListener(TestListener *listener) {
m_listener = listener;
}
void run() {
if (m_listener != NULL) {
m_listener->onSuccess(0);
m_listener->onError(1);
}
};
private:
TestListener *m_listener;
public:
Test() : m_listener(NULL) { }
void setListener(TestListener *listener) {
m_listener = listener;
}
void run() {
if (m_listener != NULL) {
m_listener->onSuccess(0);
m_listener->onError(1);
}
};
771デフォルトの名無しさん
2020/03/07(土) 13:10:29.44ID:qpmtEUNF772デフォルトの名無しさん
2020/03/07(土) 13:12:54.90ID:0g+cGFce773蟻人間 ◆T6xkBnTXz7B0
2020/03/07(土) 13:13:53.37ID:ECZE2b67 class MyListener : public TestListener {
public:
virtual void onSuccess(int result) {
printf("だから何?\n");
}
virtual void onError(int errorCode) {
printf("100年ROMってろ\n");
}
};
Test test;
MyListener lis;
test.setListener(&lis);
test.run();
public:
virtual void onSuccess(int result) {
printf("だから何?\n");
}
virtual void onError(int errorCode) {
printf("100年ROMってろ\n");
}
};
Test test;
MyListener lis;
test.setListener(&lis);
test.run();
774デフォルトの名無しさん
2020/03/07(土) 13:18:44.05ID:CT6knIM5775772
2020/03/07(土) 13:20:39.61ID:0g+cGFce776デフォルトの名無しさん
2020/03/07(土) 13:20:43.30ID:CT6knIM5 ちょっと試してみます
777デフォルトの名無しさん
2020/03/07(土) 14:15:14.60ID:CT6knIM5 ありがとうございました。
内容は大体理解できたので、今後のテンプレとして使わせていただきます。
助かりました!
内容は大体理解できたので、今後のテンプレとして使わせていただきます。
助かりました!
778デフォルトの名無しさん
2020/03/08(日) 22:16:34.90ID:51E2S4Dp http://codepad.org/4KkPN9ki
上記を実行すると下記結果になります。
[2]を見ると、vectorの3つ目以降はポインタのアドレスがあうのですが、2つ目までは合っていません。
MAPの方にはvectorのポインタを渡しているつもりなので、[2]のアドレスはvectorのアドレスと一致する。
が期待値なのですが、理由はわかりますでしょうか?
[1]
VECTOR ABC 0x144dd20
VECTOR DEF 0x144dd28
VECTOR GHI 0x144dd30
[2]
MAP itr GHI 0x144dd30 ←vectorの3つ目以降はポインタが一致する
MAP itr ABC 0x144dc20
MAP itr DEF 0x144dcc8
[3]
VECTOR for_each ABC 0x144dd20
VECTOR for_each DEF 0x144dd28
VECTOR for_each GHI 0x144dd30
上記を実行すると下記結果になります。
[2]を見ると、vectorの3つ目以降はポインタのアドレスがあうのですが、2つ目までは合っていません。
MAPの方にはvectorのポインタを渡しているつもりなので、[2]のアドレスはvectorのアドレスと一致する。
が期待値なのですが、理由はわかりますでしょうか?
[1]
VECTOR ABC 0x144dd20
VECTOR DEF 0x144dd28
VECTOR GHI 0x144dd30
[2]
MAP itr GHI 0x144dd30 ←vectorの3つ目以降はポインタが一致する
MAP itr ABC 0x144dc20
MAP itr DEF 0x144dcc8
[3]
VECTOR for_each ABC 0x144dd20
VECTOR for_each DEF 0x144dd28
VECTOR for_each GHI 0x144dd30
779デフォルトの名無しさん
2020/03/08(日) 23:05:19.29ID:SIolBUWz emplace_back()の時にvectorのサイズが拡張されて中身が再配置されることがある
そうなると拡張前に取ったポインタは無効になる
嫌だったらvectorの挿入削除が一通り終わってからポインタ取るとか、
必要量でreserve()して再配置されないようにするとか、deque使うとかその辺
そうなると拡張前に取ったポインタは無効になる
嫌だったらvectorの挿入削除が一通り終わってからポインタ取るとか、
必要量でreserve()して再配置されないようにするとか、deque使うとかその辺
780デフォルトの名無しさん
2020/03/09(月) 07:24:49.77ID:50Nkxt/s vector<int> v があるとして、
for(auto i: v)
というループの中で v の要素を変更したときの挙動って言語仕様として決まってるの?
あと、
for(auto i: set<int>(v.begin(), v.end()))
みたいなループを書いたときって set の定義を外に出したときと比べてパフォーマンス上の違いある?
for(auto i: v)
というループの中で v の要素を変更したときの挙動って言語仕様として決まってるの?
あと、
for(auto i: set<int>(v.begin(), v.end()))
みたいなループを書いたときって set の定義を外に出したときと比べてパフォーマンス上の違いある?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【カブス】今永昇太 1年約34億円で残留へ QO受諾 米メディア報じる [鉄チーズ烏★]
- 【悲報】おこめ券、9.5億円配布分のうち2.4億が経費、うちJAが1億円中抜き🤗高市ありがとう [359965264]
- 【悲報】高市有事で日本に同調する国、1つも現れないwwwwwwwwwwwwwww [603416639]
- 【雑談】暇人集会所part19
- 不知火フレア、尾丸ポルカ、星街すいせい、さくらみこ、白銀ノエル「「「「「お前くんっ!結婚して!」」」」」←誰を選ぶ?
- 自閉症が「んなっしょい」と連呼するお🏡
- ブラックフライデーでダークソウル買って初プレイしてみようかなと思うけどどうかな
