C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://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++相談室 part145
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/09/13(金) 17:13:24.60ID:/ygW08Jq194デフォルトの名無しさん
2019/09/29(日) 10:02:14.52ID:sih8o/+S195デフォルトの名無しさん
2019/09/29(日) 10:24:44.95ID:MP9GBJ11 いや同じ識別子を違う意味で使いたいのなら名前空間だ
名前をどうかしたいというだけでクラス化するといらん制限がかかって邪魔なだけ
名前をどうかしたいというだけでクラス化するといらん制限がかかって邪魔なだけ
196デフォルトの名無しさん
2019/09/29(日) 10:27:55.39ID:lvoGL429197デフォルトの名無しさん
2019/09/29(日) 12:21:02.27ID:xopwPRlT 名前空間は一連の処理や機能をライブラリとしてまとめるときに他のライブラリと名前衝突しないようにするためのものだ
minとmaxの違いだけなら名前空間分けずに変数名や関数名に直接反映させればいいのでは
minとmaxの違いだけなら名前空間分けずに変数名や関数名に直接反映させればいいのでは
198デフォルトの名無しさん
2019/09/29(日) 15:27:39.30ID:sih8o/+S >>197
個人的には自分もそう理解しています。
自分が作るプログラムでは namespace は基本的に使う必要はほぼ
有りません。古い時代に既に作ってしまったプログラムで名前が衝突して
困るような場合に使うと便利な機能として登場したのではないかと思っています。
個人的には自分もそう理解しています。
自分が作るプログラムでは namespace は基本的に使う必要はほぼ
有りません。古い時代に既に作ってしまったプログラムで名前が衝突して
困るような場合に使うと便利な機能として登場したのではないかと思っています。
199デフォルトの名無しさん
2019/09/29(日) 15:31:08.94ID:MP9GBJ11 せっかくの回避策をマクロでばっちり透過してくれた素敵なマイクロソフトw
200デフォルトの名無しさん
2019/09/29(日) 16:03:17.31ID:k4CvVXqN >>198
昔作ったものに対してだけでなく、いま作ったものが将来使うときに名前の衝突を回避するという目的もあるぞ。
昔作ったものに対してだけでなく、いま作ったものが将来使うときに名前の衝突を回避するという目的もあるぞ。
201デフォルトの名無しさん
2019/09/29(日) 16:52:41.21ID:1aVYpaid なぜ日本人c++プログラマの99%はstd::vectorもstd::find_ifも見たことすらないのだろう。
c言語風の生ポインタ、生配列、if文、for文のみを使ったプログラムしか読めない。
外国の人でそういう人は見たことがない。
c言語風の生ポインタ、生配列、if文、for文のみを使ったプログラムしか読めない。
外国の人でそういう人は見たことがない。
202デフォルトの名無しさん
2019/09/29(日) 17:03:09.76ID:bY9zxDl0 99%は盛り過ぎでは・・・
203デフォルトの名無しさん
2019/09/29(日) 17:06:09.85ID:cKDPFQQS >>201
ワイド文字知らん人見たことあるわ
ワイド文字知らん人見たことあるわ
204デフォルトの名無しさん
2019/09/29(日) 17:28:35.45ID:TRtZnyIq 体感で8割ぐらいかな
まず規格があって改訂されてるってことも知らないのもいる
これは他の言語にも言えることだが
職場で使ったことのあるJavaやPHPのバージョンと環境がすべてみたいな
まず規格があって改訂されてるってことも知らないのもいる
これは他の言語にも言えることだが
職場で使ったことのあるJavaやPHPのバージョンと環境がすべてみたいな
205デフォルトの名無しさん
2019/09/29(日) 17:37:04.15ID:MP9GBJ11 >>201
おまえ豚小屋にでも住んでるのか?w
おまえ豚小屋にでも住んでるのか?w
206デフォルトの名無しさん
2019/09/29(日) 17:38:36.19ID:MCSEZmay C++20に入るauto変数を使った簡易関数テンプレートは宣言と実装を分割してコンパイルできますか?
207デフォルトの名無しさん
2019/09/29(日) 18:02:01.75ID:xopwPRlT 全部ヘッダーファイルに書いてしまえ
208デフォルトの名無しさん
2019/09/29(日) 18:13:05.80ID:Lkb9fNY1 vector知らんのはいたとしても組み込みマンくらいだろ
209デフォルトの名無しさん
2019/09/29(日) 19:02:41.77ID:bY9zxDl0210デフォルトの名無しさん
2019/09/29(日) 19:46:49.92ID:qdFsd7WD211デフォルトの名無しさん
2019/09/29(日) 19:56:43.66ID:MCSEZmay212デフォルトの名無しさん
2019/09/29(日) 21:36:43.15ID:MP9GBJ11 >>210
組み込みマンだからprinf知りませんみたいなもんだなw
組み込みマンだからprinf知りませんみたいなもんだなw
213デフォルトの名無しさん
2019/09/29(日) 21:44:06.01ID:xcXauKC9 vectorの存在は知っていても中身は知らんやつばっかだろ
いまだに生配列の方が速いとか言ってるやついるし
いまだに生配列の方が速いとか言ってるやついるし
214デフォルトの名無しさん
2019/09/29(日) 21:51:00.97ID:lvoGL429 まあ実際計ってる奴はそんなにはいないわな。
てきとうな演算するくらいなら配列だろうとvectorだろうとほとんど変わらん
(ただしコンパイルオプションによる。
O2 ならそんな変わらんが最適化しないとvectorは本当に遅い。)
てきとうな演算するくらいなら配列だろうとvectorだろうとほとんど変わらん
(ただしコンパイルオプションによる。
O2 ならそんな変わらんが最適化しないとvectorは本当に遅い。)
215デフォルトの名無しさん
2019/09/29(日) 21:57:52.25ID:OYiClG3B まあ最適化有効にすれば、すればそこいらの玄人が生配列でごちゃごちゃ書くより速くなることが多いがな
216デフォルトの名無しさん
2019/09/29(日) 22:09:42.47ID:7KCLRAec サイズを変えない操作でvectorと生配列の効率に違いなんかないだろ
217デフォルトの名無しさん
2019/09/29(日) 22:16:27.22ID:C35/CdkS ただ最近のc++の最適化前提のスタンスはいただけないな
デバッグのためにデバッグビルド使おうとするが一桁二桁遅くなって実用に耐えないとか
問題再現できないとか多々あって困る
デバッグのためにデバッグビルド使おうとするが一桁二桁遅くなって実用に耐えないとか
問題再現できないとか多々あって困る
218デフォルトの名無しさん
2019/09/29(日) 22:58:28.58ID:UVnMNq40219デフォルトの名無しさん
2019/09/29(日) 23:03:53.99ID:7KCLRAec もし最適化の有無で速度の変わらないコードがあったとしたら、まず間違いなく人が読めるものではないだろうな
220デフォルトの名無しさん
2019/09/29(日) 23:06:55.39ID:C35/CdkS こういう開き直りのスタンスって何か固有名詞ついてなかったっけ?
マッチポンプではないし・・なんかなかったかな?
マッチポンプではないし・・なんかなかったかな?
221デフォルトの名無しさん
2019/09/29(日) 23:10:51.16ID:C35/CdkS >>219
Cはコードはそこまでひどく遅くならないからね
Cはコードはそこまでひどく遅くならないからね
222デフォルトの名無しさん
2019/09/29(日) 23:28:02.53ID:bY9zxDl0 そのおかげで実行時の速度と抽象化した書き方の両立ができるのでまあ仕方ないのでは
223デフォルトの名無しさん
2019/09/29(日) 23:34:47.03ID:C35/CdkS 仕事でやってるので仕方ないで済まないんですよね
かつ遅いところは自分達では手が入れられないところだったり
こういうところ共感できる人いないのかな
かつ遅いところは自分達では手が入れられないところだったり
こういうところ共感できる人いないのかな
224デフォルトの名無しさん
2019/09/29(日) 23:37:19.27ID:SfsnISLI >>217
良いPC買え
良いPC買え
225デフォルトの名無しさん
2019/09/29(日) 23:39:36.92ID:C35/CdkS226デフォルトの名無しさん
2019/09/29(日) 23:53:13.21ID:7KCLRAec 仕事でやってようと高水準言語とはそういうものなのだから仕方ないものは仕方ない
仕方ないで済まされないなら仕事をやめるしかない
仕事は不可能を可能にするものではない
そんなに最適化が気に入らないなら最適化なしでリリースすりゃいい
プロダクトとデバッグ環境が同一になる
仕方ないで済まされないなら仕事をやめるしかない
仕事は不可能を可能にするものではない
そんなに最適化が気に入らないなら最適化なしでリリースすりゃいい
プロダクトとデバッグ環境が同一になる
227デフォルトの名無しさん
2019/09/29(日) 23:55:18.86ID:lvoGL429 仕方ないで済まないのでc++使わずc使うっていう話だな。
そこまで無理してc++を使う必然性はない。
結局組み込み系で行われる判断というのはそういったものなんだろう。
そこまで無理してc++を使う必然性はない。
結局組み込み系で行われる判断というのはそういったものなんだろう。
228デフォルトの名無しさん
2019/09/29(日) 23:56:29.88ID:SfsnISLI じゃあ使わなければいい終わり
苦行を強いられているなら文句を言わずに甘んじて受け入れてくれうざい
デバッグができないくらい時間がかかるのであればデバッグ用にデータを減らすかデバッガを使わずにデバッグすればいいだけ
苦行を強いられているなら文句を言わずに甘んじて受け入れてくれうざい
デバッグができないくらい時間がかかるのであればデバッグ用にデータを減らすかデバッガを使わずにデバッグすればいいだけ
229デフォルトの名無しさん
2019/09/30(月) 00:01:41.09ID:1t7BL5a5 c++の問題を指摘したら自分が否定されてる気持ちになる人ですね?
こういうのって何か固有名詞ついてましたよね?
心理学かなにかの
こういうのって何か固有名詞ついてましたよね?
心理学かなにかの
230デフォルトの名無しさん
2019/09/30(月) 00:07:48.80ID:K1luVxXx 自分以外は仕事でC++使ってないと思ってるのかねえ
231デフォルトの名無しさん
2019/09/30(月) 00:12:05.55ID:d3KN1ocd C++の問題ではなく、トレードオフなものを両取りできないことに腹を立てている馬鹿の頭が問題
232デフォルトの名無しさん
2019/09/30(月) 00:29:11.50ID:BjVWgoML debugバージョンでもinline有効にすれば良い
233デフォルトの名無しさん
2019/09/30(月) 00:41:06.86ID:BjVWgoML gccなら-Ogとか使えば楽
234デフォルトの名無しさん
2019/09/30(月) 08:38:56.00ID:96lznZkD >>217
問題再現できないのってUB踏んでるんじゃ...
問題再現できないのってUB踏んでるんじゃ...
235デフォルトの名無しさん
2019/09/30(月) 20:10:40.43ID:m19D9tLr c++ほどサンクコストに引っ張られる輩を作り出す言語はないだろうな。
236デフォルトの名無しさん
2019/09/30(月) 20:22:13.77ID:H9c5jpU6 つまり他の言語は底の浅いオモチャ、と
237デフォルトの名無しさん
2019/09/30(月) 20:56:24.52ID:m19D9tLr そんな掘ってもしょうがないところが深くても邪魔なだけなんだよ。
238デフォルトの名無しさん
2019/09/30(月) 21:49:42.53ID:A2h+ApYr あっさ
239デフォルトの名無しさん
2019/09/30(月) 21:53:05.92ID:eLbbGbO7 速度や効率を度外視すれば実はプログラミングはものすごく簡単になることが多い。
ところがそれだと劇的に遅くなってしまう。うまく工夫して書かれたプログラムの
所要時間を1とすると、何にも考えずに書かれたプログラムの所要時間は、
100兆位になることがある。そこまで極端でないにしても何にも考えなければ
100位にはなる。その意味で高速化を常に意識しながら組むことは結構
大切な事だと思う。特にアルゴリズム的な部分においては。
ところがそれだと劇的に遅くなってしまう。うまく工夫して書かれたプログラムの
所要時間を1とすると、何にも考えずに書かれたプログラムの所要時間は、
100兆位になることがある。そこまで極端でないにしても何にも考えなければ
100位にはなる。その意味で高速化を常に意識しながら組むことは結構
大切な事だと思う。特にアルゴリズム的な部分においては。
240デフォルトの名無しさん
2019/09/30(月) 22:05:07.81ID:JjfJ0hCF アルゴリズム的に改善できる話なら言語関係ないじゃん
241デフォルトの名無しさん
2019/09/30(月) 22:28:45.63ID:29SpHEC8 固定少数が速いとかdoubleよりもfloatが速いとか割算は遅いから掛け算だとか色々な噂聞いたけど・・・
今時ほとんど変わらんよね?
今時ほとんど変わらんよね?
242デフォルトの名無しさん
2019/09/30(月) 22:34:03.50ID:/hygPyRQ >>241
実際測ってみりゃいいよ
実際測ってみりゃいいよ
243デフォルトの名無しさん
2019/09/30(月) 22:48:36.98ID:ypiuCBLp その時のためのtemplateです。
244デフォルトの名無しさん
2019/09/30(月) 23:07:55.69ID:ypiuCBLp245デフォルトの名無しさん
2019/09/30(月) 23:15:32.33ID:d3KN1ocd class A :public T...{
にすりゃ通る
にすりゃ通る
246デフォルトの名無しさん
2019/09/30(月) 23:19:40.15ID:d3KN1ocd もしくは
struct A :T...{
継承元にアクセスできんのが原因
struct A :T...{
継承元にアクセスできんのが原因
247デフォルトの名無しさん
2019/09/30(月) 23:29:43.59ID:ypiuCBLp248デフォルトの名無しさん
2019/09/30(月) 23:42:29.68ID:ypiuCBLp249デフォルトの名無しさん
2019/09/30(月) 23:50:49.59ID:ypiuCBLp ヴェーダに接続するときに使うんかいな。とかおかしなことしか思い浮かばねー。
250デフォルトの名無しさん
2019/10/01(火) 10:39:26.07ID:SeWV7ZFb251デフォルトの名無しさん
2019/10/01(火) 15:52:31.87ID:vnyPyC// >>193-194,196
では、Edgeという名前の構造体の定義を問題によって変えたいときはどうすれば良いですか?
では、Edgeという名前の構造体の定義を問題によって変えたいときはどうすれば良いですか?
252デフォルトの名無しさん
2019/10/01(火) 21:48:01.50ID:9tGbOXPW253デフォルトの名無しさん
2019/10/01(火) 21:50:51.00ID:sOAgszt0 いや、今時のプロセッサはSIMDで不動小数点演算するからdoubleよりfloatの方が速いよ
演算やプロセッサによるが、大抵2〜4倍差が出る
演算やプロセッサによるが、大抵2〜4倍差が出る
254デフォルトの名無しさん
2019/10/01(火) 23:04:08.95ID:+hOGjxeQ floatが早い今どきのプロセッサってGPUの話か?
ちゃんと区別しろ
ちゃんと区別しろ
255デフォルトの名無しさん
2019/10/01(火) 23:06:13.36ID:geI6I9WY 直前の計算結果を次の計算で使うようなありがちな状況だと、SIMDじゃ一切早くならないのでは?よく知らんけど
256デフォルトの名無しさん
2019/10/01(火) 23:06:54.09ID:sOAgszt0 x86とかも典型的だろ
doubleよりfloatの方が倍速いよ
最近はbfloat16の方がさらに速いまである
doubleよりfloatの方が倍速いよ
最近はbfloat16の方がさらに速いまである
257デフォルトの名無しさん
2019/10/01(火) 23:26:39.35ID:5ranOfZi SIMDで1語で複数のfloat演算を並列にやったら早くなる
しかしコンパイラの最適化が普通はそこまでやってくれない
しかしコンパイラの最適化が普通はそこまでやってくれない
258デフォルトの名無しさん
2019/10/01(火) 23:28:12.34ID:DRbEIshC 今はfloatのが速い
amd64出てからsse基本なので
昔とは状況が違う
amd64出てからsse基本なので
昔とは状況が違う
259デフォルトの名無しさん
2019/10/01(火) 23:28:49.51ID:DRbEIshC >>257
やるけど
やるけど
260デフォルトの名無しさん
2019/10/01(火) 23:30:04.90ID:5ranOfZi >>259
やるんか?
やるんか?
>>253
1個のプログラムの中に一個か二個の float しか使わなくても、 double の場合より速くなるのですか?
そもそもイントリンシックを書かないのに SIMD のコードが出力されるのですか?
私は、コンパイラは fpu のコードしか吐かないじゃないか?って考えています
1個のプログラムの中に一個か二個の float しか使わなくても、 double の場合より速くなるのですか?
そもそもイントリンシックを書かないのに SIMD のコードが出力されるのですか?
私は、コンパイラは fpu のコードしか吐かないじゃないか?って考えています
262デフォルトの名無しさん
2019/10/01(火) 23:37:45.74ID:KZgN44vw >>261
それはお前の頭が老害だから
それはお前の頭が老害だから
263デフォルトの名無しさん
2019/10/01(火) 23:39:09.19ID:84uW7JaU 速さ計測すればいいじゃん
逆アセンブル見ればいいじゃん
逆アセンブル見ればいいじゃん
>>262
1個のプログラムの中に一個か二個の float しか使わなくても、 double の場合より速くなるのですか?
そもそもイントリンシックを書かないのに SIMD のコードが出力されるのですか?
1個のプログラムの中に一個か二個の float しか使わなくても、 double の場合より速くなるのですか?
そもそもイントリンシックを書かないのに SIMD のコードが出力されるのですか?
265デフォルトの名無しさん
2019/10/01(火) 23:44:09.36ID:sOAgszt0 そもそもx64ではFPUは無かったことにされている
doubleやfloatの計算したかったらSIMDで1レーンだけ使って計算する仕組み
doubleやfloatの計算したかったらSIMDで1レーンだけ使って計算する仕組み
266デフォルトの名無しさん
2019/10/01(火) 23:54:05.20ID:5ranOfZi >1個のプログラムの中に一個か二個の float しか使わなくても、 double の場合より速く
その条件だとどっちを使っても良い大して変わらん
やっぱループアンローリングできるぐらいループリッチな課題でないと意味が無い
https://www.isus.jp/products/c-compilers/compiler_part2/
https://cpplover.blogspot.com/2015/03/blog-post_30.html
その条件だとどっちを使っても良い大して変わらん
やっぱループアンローリングできるぐらいループリッチな課題でないと意味が無い
https://www.isus.jp/products/c-compilers/compiler_part2/
https://cpplover.blogspot.com/2015/03/blog-post_30.html
267デフォルトの名無しさん
2019/10/02(水) 00:10:27.89ID:eo8nmuYy しかしコンパイラの最適化はイマイチっぽい
https://www.isus.jp/products/c-compilers/compiler_part4/
https://www.isus.jp/products/c-compilers/compiler_part4/
>>265
いいえ x64 でも fpu コードは使えますよ、嘘はやめて!
いいえ x64 でも fpu コードは使えますよ、嘘はやめて!
269デフォルトの名無しさん
2019/10/02(水) 07:54:44.99ID:Y2eIpMbX >>228
こういうやつって何かしらソフト完成させたこともない初心者のクセしてイキってるんだろ
マジ邪魔だから消えて欲しい
テンプレート使ったコードで遅くなるというのがわからんならboostのspiritとか使ってみたらいいわ
言ってる意味わかるから
こういうやつって何かしらソフト完成させたこともない初心者のクセしてイキってるんだろ
マジ邪魔だから消えて欲しい
テンプレート使ったコードで遅くなるというのがわからんならboostのspiritとか使ってみたらいいわ
言ってる意味わかるから
270デフォルトの名無しさん
2019/10/02(水) 07:59:03.00ID:Y2eIpMbX あ、もちろんデバッグビルドの話な
最適化ありならspiritは当然速い
最適化ありならspiritは当然速い
271デフォルトの名無しさん
2019/10/02(水) 08:01:33.95ID:sddCZQNP C++を使わないと言っているやつに、どうぞご勝手にということと何の関係が?
272デフォルトの名無しさん
2019/10/02(水) 08:22:40.25ID:QmwKmz4W >>268
でもアセンブラで直接使わないと無かったことにされるだろ
でもアセンブラで直接使わないと無かったことにされるだろ
273デフォルトの名無しさん
2019/10/02(水) 08:29:18.29ID:0zoKeqvU >>261
amd64でfpuコード吐かせるほうが手間じゃwwww
amd64でfpuコード吐かせるほうが手間じゃwwww
274デフォルトの名無しさん
2019/10/02(水) 08:30:44.39ID:0zoKeqvU そもそもプログラム中に一個か二個の浮動小数点演算なんて最適化ポイントちゃうがなwwww
自説を通すためにバカな例を仮定するアホに絡むだけ無駄やなw
自説を通すためにバカな例を仮定するアホに絡むだけ無駄やなw
275デフォルトの名無しさん
2019/10/02(水) 11:21:30.36ID:iITLzrzf276デフォルトの名無しさん
2019/10/02(水) 22:05:22.14ID:VK3sSC9+ コンパイラの種類変わったら算術演算ぶん回す場合は結構差が出るだろうけど、同じコンパイラでバージョンかわると最適化とかの進化で結構かわるのかな?
gccの3と4、msvcの2005と2017とかそういう違いで
gccの3と4、msvcの2005と2017とかそういう違いで
277デフォルトの名無しさん
2019/10/03(木) 04:57:05.82ID:vAL7lUst 質問です
既にクラスHogeとAがあり
クラスAとは別に新たにクラスBを追加することになった
BはA専用の関数が無く呼び出す必要も無いし逆のことは無い
その場合BにA専用の関数と同じ名前の空の関数を用意するか、呼び出されているHoge内で切り分けるかどちらの方が良いですか?
なおAは絶対に継承しなければならないし改変することもできない
class Hoge : A か class Hoge : Bをプリプロセッサかテンプレートで切り分ける
これを
void Hpge::func() {
A_func(); //Bは持っていない
}
プリプロセッサで切り分けるのが良いのか
void Hpge::func() {
#if defined(USE_A)
A_func();
#endif
}
それとも空の関数を書いた方が良いのか
class Hoge : B {
A_func() {}
}
詳しい方がいたら教えていただきたいです
これ以外の賢いやり方があればそれでも大丈夫です
既にクラスHogeとAがあり
クラスAとは別に新たにクラスBを追加することになった
BはA専用の関数が無く呼び出す必要も無いし逆のことは無い
その場合BにA専用の関数と同じ名前の空の関数を用意するか、呼び出されているHoge内で切り分けるかどちらの方が良いですか?
なおAは絶対に継承しなければならないし改変することもできない
class Hoge : A か class Hoge : Bをプリプロセッサかテンプレートで切り分ける
これを
void Hpge::func() {
A_func(); //Bは持っていない
}
プリプロセッサで切り分けるのが良いのか
void Hpge::func() {
#if defined(USE_A)
A_func();
#endif
}
それとも空の関数を書いた方が良いのか
class Hoge : B {
A_func() {}
}
詳しい方がいたら教えていただきたいです
これ以外の賢いやり方があればそれでも大丈夫です
278デフォルトの名無しさん
2019/10/03(木) 07:04:32.42ID:damPur2/ 絶対に、の理由が知りたいところだけど、普通はA_funcを仮想関数にしてBは空関数でオーバーライド。
279デフォルトの名無しさん
2019/10/03(木) 07:05:22.94ID:OJdSM3QH c++17以降ならif constexprとstd::is_sameでできるんじゃない?
template < typename T >
class Hoge : T{
void func() {
if constexpr(std::is_same<T,A>){ //基底クラスTがAであればA_func()を実行する
A_func();
}
}
}
template < typename T >
class Hoge : T{
void func() {
if constexpr(std::is_same<T,A>){ //基底クラスTがAであればA_func()を実行する
A_func();
}
}
}
280デフォルトの名無しさん
2019/10/03(木) 07:12:55.92ID:OJdSM3QH std::is_same<T,A> じゃなくて std::is_same_v<T,A> か
281デフォルトの名無しさん
2019/10/03(木) 07:31:04.45ID:5EMHpFEj282デフォルトの名無しさん
2019/10/03(木) 07:54:23.64ID:r73Y/293 c++17が使えなくて、Bの定義を関係ないAのために汚染したくないなら一層増やせばいい
template<typename T>
class HogeBase;
template<>
class HogeBase<A> : A {}
template<>
class HogeBase<B> : B { A_func(){} }
template<typename T>
class Hoge : HogeBase<T> { /*...*/ }
template<typename T>
class HogeBase;
template<>
class HogeBase<A> : A {}
template<>
class HogeBase<B> : B { A_func(){} }
template<typename T>
class Hoge : HogeBase<T> { /*...*/ }
283デフォルトの名無しさん
2019/10/03(木) 09:13:02.91ID:r91xqmRv >>281
なにか問題起きる?
なにか問題起きる?
284デフォルトの名無しさん
2019/10/03(木) 11:57:14.92ID:z1c5xmGq >>277
基底クラスを切替たいってこと?
しかも片方の基底クラスにしかないメソッドを派生クラス側で呼出すとかどんな状況なんだろう…
まあ、やっつけでやるなら素直にB側に空のメソッド追加しとけばいいと思うよ
どう見てもまともな設計じゃなさそうだし、かと言って設計を見直すこともできなさそうだしね
プリプロセッサなんて愚の骨頂にしかならん
基底クラスを切替たいってこと?
しかも片方の基底クラスにしかないメソッドを派生クラス側で呼出すとかどんな状況なんだろう…
まあ、やっつけでやるなら素直にB側に空のメソッド追加しとけばいいと思うよ
どう見てもまともな設計じゃなさそうだし、かと言って設計を見直すこともできなさそうだしね
プリプロセッサなんて愚の骨頂にしかならん
285281
2019/10/03(木) 12:22:59.66ID:GJuckdYX >>283
A_funcを持つものを継承するならオーバーライドが理想的だろうけど、基底がAかBってことだから無理っしょ
しかもAは書き換えられないときてる
すでに言われてるようにテンプレートで基底を指定させるか単純に空のA_funcを書くか、プリプロセッサか
でもそもそも利用者側がAを使うのかBを使うのか決めるのなら、クラス側で対処せずに利用者がプリプロセッサで分けた方がいいと思う(でないとぐちゃぐちゃになりそう)
それだと修正箇所が多すぎるのかもしれんけど
A_funcを持つものを継承するならオーバーライドが理想的だろうけど、基底がAかBってことだから無理っしょ
しかもAは書き換えられないときてる
すでに言われてるようにテンプレートで基底を指定させるか単純に空のA_funcを書くか、プリプロセッサか
でもそもそも利用者側がAを使うのかBを使うのか決めるのなら、クラス側で対処せずに利用者がプリプロセッサで分けた方がいいと思う(でないとぐちゃぐちゃになりそう)
それだと修正箇所が多すぎるのかもしれんけど
286デフォルトの名無しさん
2019/10/03(木) 13:00:06.78ID:t4NBMq8s こんなマトモじゃないケースに
ベストな解答なんかないわな
ベストな解答なんかないわな
287デフォルトの名無しさん
2019/10/03(木) 13:00:33.56ID:YSTER/9m >>284
Qtをdisってんの
Qtをdisってんの
288デフォルトの名無しさん
2019/10/03(木) 15:51:04.04ID:z1c5xmGq まさかと思うがQtを盲信してるのか?w
289デフォルトの名無しさん
2019/10/03(木) 16:04:15.58ID:LjcEi/T6 ちょとっ猛進
290デフォルトの名無しさん
2019/10/03(木) 16:37:32.38ID:vAL7lUst 回答ありがとうございます
プリプロセッサまみれになるより空の関数生やした方が見通しよさそうですね
プリプロセッサまみれになるより空の関数生やした方が見通しよさそうですね
291デフォルトの名無しさん
2019/10/03(木) 18:04:25.67ID:SL8wP/0a >>288
え、qt便利じゃん
え、qt便利じゃん
292デフォルトの名無しさん
2019/10/03(木) 19:00:51.01ID:BEqWQnsI 旧版は知らんけどQt5はかなり良いと思う
不満に思うのはベンチ厨くらいでは
不満に思うのはベンチ厨くらいでは
293デフォルトの名無しさん
2019/10/03(木) 19:22:01.27ID:z1c5xmGq >>291
便利かどうかなんて言ってないのにいきなりどうした?w
便利かどうかなんて言ってないのにいきなりどうした?w
294デフォルトの名無しさん
2019/10/03(木) 21:53:13.09ID:Uq6PP8Ux コンパイル通らないので助けてください。
メンバテンプレートを持つクラスを継承して、派生先からメソッドが呼べません。
一見問題なさそうにはみえるのですが・・・
template<typename _T1>
class A{
public :
template<typename _T2> _T2 get() { return _T2(); };
};
template<typename _T3>
class B : public A<_T3> {
std::string hogehoge() { return A<_T3>::get<std::string>();}
};
メンバテンプレートを持つクラスを継承して、派生先からメソッドが呼べません。
一見問題なさそうにはみえるのですが・・・
template<typename _T1>
class A{
public :
template<typename _T2> _T2 get() { return _T2(); };
};
template<typename _T3>
class B : public A<_T3> {
std::string hogehoge() { return A<_T3>::get<std::string>();}
};
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- アメリカ議会 「中国が台湾武力侵攻する準備を急速進展中」 ★3 [お断り★]
- 外国人の犯罪率は日本人の1.72倍 警察庁が短期滞在者除いた数字を参院内閣委で答弁 [七波羅探題★]
- 【高市自民】中国軍SNS 高市首相に怖すぎる地獄絵で警告、火の海の靖国神社「自ら墓穴を掘り、戻れない道へ進む」 [夜のけいちゃん★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★9 [樽悶★]
- アメリカ議会 「中国が台湾武力侵攻する準備を急速進展中」 ★4 [お断り★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 【憲法改正】起草委員会、設置へ [476729448]
- 3K新聞「高市首相「馬車馬」の1カ月…宿舎で猛勉強、外交乗り切る 会食なく睡眠不足、心配の声も」 [834922174]
- 【悲報】大手経済誌が年収が低い会社ランキングを発表、Vtuberのにじさんじがランクインしてしまう…
- 【35🌸専】なんG さくらみこ桃鉄配信実況スレ🏡【ホロライブ▶】
- vipすげーな
- 皆で雑談しよーや
