次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
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
C++相談室 part137
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0593デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 19:18:19.30ID:scCYqhjF0 他人が作ったクラスで勝手にいじれないんでしょ?
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど
そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ
svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ
どうせ親クラスのprivateはいじれないんだし
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど
そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ
svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ
どうせ親クラスのprivateはいじれないんだし
594デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 19:20:28.05ID:wzHnJ4yt0 unified call syntax 甦れ。
595デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 19:24:14.64ID:nikK7GUa0 >>591
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・
継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う
(責任は負わんw あくまで勉強目的でやってみるのはいいと思う)
ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は
>>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい
特に
>掛け算、足し算
こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む
(メンバに書いてもグローバルに書いても利用者側はA * Bって書ける
あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・
継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う
(責任は負わんw あくまで勉強目的でやってみるのはいいと思う)
ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は
>>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい
特に
>掛け算、足し算
こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む
(メンバに書いてもグローバルに書いても利用者側はA * Bって書ける
あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね
596デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 19:48:50.66ID:MaoTi4980 >>595
完全に同意。
完全に同意。
597デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 19:58:47.83ID:nVnA1Sbpr >>592-596
なるほど。
普通に関数にするのが、必要十分さの面で、良さそうですね。
頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。
グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。
メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。
コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
なるほど。
普通に関数にするのが、必要十分さの面で、良さそうですね。
頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。
グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。
メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。
コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
598デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 20:09:39.68ID:scCYqhjF0 引数の型が○○やconst ○○&になるでしょ
それ以上のなにが欲しいの?
それ以上のなにが欲しいの?
599デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 20:10:46.02ID:nikK7GUa0 そういえばBLASとは書いてたけどuBLASとは書いてなかったな
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ
違う型を渡したらエラーになる
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ
違う型を渡したらエラーになる
600デフォルトの名無しさん (ブーイモ MMb6-WirJ)
2018/09/21(金) 20:12:28.34ID:+2gqfJ3dM >>597
どうでもいいけど最初と大分キャラ変わってるぞw
どうでもいいけど最初と大分キャラ変わってるぞw
601デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 20:17:41.28ID:nVnA1Sbpr >>598-599
わかりました。
確かに型を見たら自明ですね。
結局は
> svd(m)をm.svd()って書きたいためだけ
だったのかも知れません。
なんせそういう書き方はいかにも「ぽい」ですから。
ありがとうございます。
わかりました。
確かに型を見たら自明ですね。
結局は
> svd(m)をm.svd()って書きたいためだけ
だったのかも知れません。
なんせそういう書き方はいかにも「ぽい」ですから。
ありがとうございます。
602デフォルトの名無しさん (スプッッ Sdc2-m97R)
2018/09/21(金) 20:19:42.40ID:KRvbJL35d603はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 20:43:37.20ID:FzfC+eZt0604デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 21:06:19.19ID:nikK7GUa0 ・・・・・俺が何を批判したかわかってないな
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、
質問者のケースに合った説明をしろっつってんの
なんで当時の「テンプレートで継承の代用」の例を出したかわからんか?
代用にはなり得ないんだよ原理的に
実行時のポリモーフィズムをテンプレートで実現できるのか?
ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ
それを1つの型でまとめられるのか??
type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな
自分の頭でその方法が合っているか合っていないか考えずに
流行とかに流された結果が、↑で挙げたソレなんだよ
C++潰したいのかよ
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、
質問者のケースに合った説明をしろっつってんの
なんで当時の「テンプレートで継承の代用」の例を出したかわからんか?
代用にはなり得ないんだよ原理的に
実行時のポリモーフィズムをテンプレートで実現できるのか?
ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ
それを1つの型でまとめられるのか??
type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな
自分の頭でその方法が合っているか合っていないか考えずに
流行とかに流された結果が、↑で挙げたソレなんだよ
C++潰したいのかよ
605デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 21:35:12.47ID:MaoTi4980 >>604
これも横からだが、C++はもう役割を終えて衰退機だと思う。
今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。
いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。
盛者必衰。
これも横からだが、C++はもう役割を終えて衰退機だと思う。
今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。
いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。
盛者必衰。
606はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 21:55:31.46ID:FzfC+eZt0607デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:01:19.22ID:nikK7GUa0 >>606
ああすまん、確かに言葉尻に反応したところはあったな
でも「風潮」とか「ダサい」って蛇足だよな?w
ダサいって言いたかっただけやろ?
>違う機能が違う能力を持つのは当たり前だろ?
お前>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
テンプレートを盲信してるようだから説明したんだが。
継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか
抜かしたかったのがわかる
マルチパラダイムの意味わかってる?
ああすまん、確かに言葉尻に反応したところはあったな
でも「風潮」とか「ダサい」って蛇足だよな?w
ダサいって言いたかっただけやろ?
>違う機能が違う能力を持つのは当たり前だろ?
お前>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
テンプレートを盲信してるようだから説明したんだが。
継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか
抜かしたかったのがわかる
マルチパラダイムの意味わかってる?
608デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/21(金) 22:15:11.22ID:M9VunTBo0 継承をテンプレートで置き換えるって失敗したというよりもすでに当たり前になっただけでは
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
609デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:20:50.92ID:nikK7GUa0610はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 22:46:33.24ID:FzfC+eZt0 >>607
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
違うものは違う。 代用品ではない。
継承構造の代用品としてテンプレートを使えというのではなく、
テンプレートも前提のひとつとしたデザインにしろと言ってんの。
「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?
違うものは違う。 代用品ではない。
継承構造の代用品としてテンプレートを使えというのではなく、
テンプレートも前提のひとつとしたデザインにしろと言ってんの。
「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
611デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:01:04.77ID:nikK7GUa0 >>610
>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
>それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。
って言ってるよな
「かつて上手くいかなかった」って、
俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」
のことだろ?言い逃れしてんじゃねーよ
ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ
ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな
お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ
>「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
>>603で
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
>それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。
って言ってるよな
「かつて上手くいかなかった」って、
俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」
のことだろ?言い逃れしてんじゃねーよ
ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ
ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな
お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ
>「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
612デフォルトの名無しさん (ワッチョイ f107-Yi59)
2018/09/21(金) 23:02:28.75ID:ZQgI79kj0 質問者を放置してドヤ顔で語るオタクたち
613デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:10:39.91ID:nikK7GUa0 あ、ついでに言うと
>言語そのものとしてのサポートが不充分だった
ねーよ
C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが
STLしかりModern C++ Designの著者のLokiしかり
Boostだって当時からあったからな
>言語そのものとしてのサポートが不充分だった
ねーよ
C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが
STLしかりModern C++ Designの著者のLokiしかり
Boostだって当時からあったからな
614デフォルトの名無しさん (ワッチョイ 42b3-GHk6)
2018/09/21(金) 23:26:46.84ID:wfTNvghC0615デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 23:30:11.36ID:wzHnJ4yt0 FixedC++であるRustに期待はしているが・・・。
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 23:41:33.16ID:FzfC+eZt0 >>611
なんでその結論に納得できるのに前提に色々言ってんだ?
テンプレートについてはそっちが言い始めたことで、別の話題だろ?
代用という言葉の使い方がちょっとずれてるだけじゃないの。
そのまま置き換えれるかという意味では代用できないし、
継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある)
という意味では代用ともいえる。
言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。
デザインの風潮というものは間違いなくある。
なんでその結論に納得できるのに前提に色々言ってんだ?
テンプレートについてはそっちが言い始めたことで、別の話題だろ?
代用という言葉の使い方がちょっとずれてるだけじゃないの。
そのまま置き換えれるかという意味では代用できないし、
継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある)
という意味では代用ともいえる。
言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。
デザインの風潮というものは間違いなくある。
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 00:00:10.67ID:cynlNZMd0 >>613
無理無理。
今だってろくでもない回りくどい仕組みでどうにかこうにか
型の制約を表現できてるってだけだもの。
初心者にそれを元にデザインさせるのは無理。
型の制約についての知見とは別に C++ の言語機能が足りてない。
無理無理。
今だってろくでもない回りくどい仕組みでどうにかこうにか
型の制約を表現できてるってだけだもの。
初心者にそれを元にデザインさせるのは無理。
型の制約についての知見とは別に C++ の言語機能が足りてない。
618デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:04:20.29ID:0je8S2eS0 >テンプレートについてはそっちが言い始めたことで
ダサいとかイケてるとか風潮とかで設計を語るからだよ
お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか?
そういう傾向を指摘されたって気づいてるだろ?
自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ?
さっさと謝ってりゃここまで言ってないんだがな
>デザインの風潮というものは間違いなくある。
そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
>>617
何の話してんの?コンセプト?w
なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの?
コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
ダサいとかイケてるとか風潮とかで設計を語るからだよ
お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか?
そういう傾向を指摘されたって気づいてるだろ?
自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ?
さっさと謝ってりゃここまで言ってないんだがな
>デザインの風潮というものは間違いなくある。
そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
>>617
何の話してんの?コンセプト?w
なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの?
コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
619デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/22(土) 00:11:49.56ID:vYximTvP0 最初はもてはやされたけど、みんな知ってる前提になったら特に触れられもしなくなった
風潮ってこいうのだろw
風潮ってこいうのだろw
620デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:12:42.81ID:0je8S2eS0 すまんちょっと熱くなりすぎた
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・
もうやめとく
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・
もうやめとく
621デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/22(土) 01:40:05.82ID:3xdfFsZb0 権限の委譲というと良いものを与えているイメージだが
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ
な気がする
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ
な気がする
622572 (ワッチョイ 42bd-LgAV)
2018/09/22(土) 02:14:06.30ID:3xdfFsZb0 昨日のプログラムを改良したったwwwww
ttps://ideone.com/hkeEp0
データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。
N=1000だと宇宙の終わりまでかかる予定。
これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
ttps://ideone.com/hkeEp0
データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。
N=1000だと宇宙の終わりまでかかる予定。
これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
623デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:45:26.27ID:57qyxfm80 https://ideone.com/CYkJfe
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。
終わった話題かもしれんけど。
どうしても高速化したいんやったら、関数を並列実行できるようにして、
https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html
上記の数で分割実行かなぁとか。
フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。
終わった話題かもしれんけど。
どうしても高速化したいんやったら、関数を並列実行できるようにして、
https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html
上記の数で分割実行かなぁとか。
フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
624デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:54:48.35ID:57qyxfm80 気が付いたら、absがテンプレート関数じゃなくなってた。
625デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 07:17:07.67ID:ieaomBGwa constexprな関数はコンパイル時でも実行時でも使えるが、定数になる文脈とならない文脈で関数を使い分けしたい。そういう使い分けは可能だろうか?
例えばsqrt関数はconstexprになっていないが、
アルゴリズム的には自作関数でconstexpr対応可能
ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
例えばsqrt関数はconstexprになっていないが、
アルゴリズム的には自作関数でconstexpr対応可能
ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
626デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 07:58:27.87ID:0je8S2eS0 is_constexprで検索したらそれっぽいアイデアは出てくるけど
627デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/22(土) 09:39:59.40ID:qCwQCuMG0628はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 12:24:16.36ID:cynlNZMd0629デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:05:08.82ID:PHVB0Lj2M templateで躓いてるんですけど皆どうやってテンプレートを勉強したんですか?
630デフォルトの名無しさん (ワッチョイ c17f-coYL)
2018/09/22(土) 13:06:49.63ID:sAfENX6G0 車輪の再発明
631デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 13:16:51.91ID:EBMrcrP1a 何を悩んでる?
632デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:22:32.93ID:PHVB0Lj2M >>631
Boostのテンプレートを読んでるのですが、理解できない点です
Boostのテンプレートを読んでるのですが、理解できない点です
633デフォルトの名無しさん (ワッチョイ 22f9-xOzC)
2018/09/22(土) 13:36:27.52ID:a9vdXzW90 >>632
まずはstlは一通り不自由なく使えるかな?
まずはstlは一通り不自由なく使えるかな?
634デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:45:08.87ID:PHVB0Lj2M >>633
はい、STLに関してはそれなりに使えます
はい、STLに関してはそれなりに使えます
635はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 13:53:36.62ID:cynlNZMd0636デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/22(土) 15:05:35.09ID:JTph0UBg0 boost読んでテンプレート勉強しようとするのは、IOCCCでCを勉強しようとするのと同じくらい無謀
637デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/22(土) 23:16:14.20ID:Img386zI0 test
638デフォルトの名無しさん (ワッチョイ b198-rhI1)
2018/09/22(土) 23:16:57.30ID:02eserMU0 アホ
639デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:42:54.42ID:cRG95Xcq0 boostのインチキくさそうなソケット通信とか使ってるヤツいんの
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
640デフォルトの名無しさん (ワッチョイ 6e5b-Nssn)
2018/09/23(日) 01:28:26.89ID:MC3A3QT40 SG4に標準化提案はされてるみたいね
641はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/23(日) 03:10:01.78ID:SNhvYMGK0642デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 09:37:53.48ID:LgC14Oo10 bool operator<(const T& a, const T& b)は定義されている前提で、
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、
定義されていなかったら
bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); }
を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、
定義されていなかったら
bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); }
を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
643デフォルトの名無しさん (ワッチョイ 62f3-coYL)
2018/09/23(日) 11:39:09.69ID:A6XCmyXs0 std::rel_ops空間に == から != を、< から <= > >= を合成するテンプレートならあるけど
644デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/23(日) 12:14:54.07ID:loi8GnJQ0 これとかに載ってなかったっけ?
https://www.amazon.co.jp/dp/4894714353/?tag=hatena_st1-22&ascsubtag=d-7dzm
https://www.amazon.co.jp/dp/4894714353/?tag=hatena_st1-22&ascsubtag=d-7dzm
645デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 14:13:03.08ID:oyuLVtOs0 detection idiomで検出してSFINAEで分岐させるだけでできそうだけど
646デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 14:26:07.42ID:Dpz6ufMn0 barton nackman trickやな
operator ==が定義されているかどうかの分岐はSFINAEいるんでちょっと複雑になりそうだけど
private継承する基底を選ぶような形にできるはず
operator ==が定義されているかどうかの分岐はSFINAEいるんでちょっと複雑になりそうだけど
private継承する基底を選ぶような形にできるはず
647デフォルトの名無しさん (ワッチョイ 19b3-wH+P)
2018/09/23(日) 16:41:12.46ID:d60j7qb90 そんなことができるざんすか。
めんどくさそうですな。
めんどくさそうですな。
648デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 16:42:46.60ID:oyuLVtOs0 if constexprつかえばSFINAEいらんな
普段使えない環境だから出てこなかった・・・
普段使えない環境だから出てこなかった・・・
649デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 17:06:46.21ID:LgC14Oo10 スフィ姉たまんねぇ
ていうか>>643見てnamespace rel_opsの定義見て考えたがSFINAE要らなくね?
コンパイラの挙動(関数名の解決規則?)として、
Tについてoperator==(const T& a, const T& b)そのものズバリが定義されていればそれが使われるし、
無ければその次以降にテンプレートを探しに行こうとするから、
そのときstd::rel_ops名前空間が導入されていれば勝手にテンプレートバージョンが使われる
というしくみっぽい?
ていうか>>643見てnamespace rel_opsの定義見て考えたがSFINAE要らなくね?
コンパイラの挙動(関数名の解決規則?)として、
Tについてoperator==(const T& a, const T& b)そのものズバリが定義されていればそれが使われるし、
無ければその次以降にテンプレートを探しに行こうとするから、
そのときstd::rel_ops名前空間が導入されていれば勝手にテンプレートバージョンが使われる
というしくみっぽい?
650デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/23(日) 17:18:52.49ID:oc2N8BDIM651デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 17:45:10.35ID:oyuLVtOs0652デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 17:58:10.59ID:Dpz6ufMn0 >>648
if constexprほとんど使ったことなかったけど便利だなー
確かに型で分岐する必要なかった
https://wandbox.org/permlink/8CGWlZ5i5JLl33Ws
>>649
その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
それでもいいならいいけど
if constexprほとんど使ったことなかったけど便利だなー
確かに型で分岐する必要なかった
https://wandbox.org/permlink/8CGWlZ5i5JLl33Ws
>>649
その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
それでもいいならいいけど
653デフォルトの名無しさん (ワッチョイ c223-y24S)
2018/09/23(日) 19:13:07.53ID:3hdlUg1R0654デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 21:04:04.43ID:LgC14Oo10 >>652
>その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
ならない。ならずに済ませられることができる
補完する演算子のテンプレートの導入範囲を名前空間で限定すればおk↓↓↓
ttps://ideone.com/p4FS43
21行目のOP_EQ_FOO_ENを定義してもしなくてもビルドが通り、Foo::operator==()の呼び出し回数を除き同じ結果になる。
ただし、operator==()についてはちょっぴり闇が深いことがわかった。
名前空間std::rel_opsにはoperator==()テンプレートが存在しない
上のサンプルではstd::rel_ops名前空間に無理矢理operator==()テンプレートを追加したが、
実際にやるときは独自の名前空間でoperator<()以外の全部(==、!=、>、<=、>=)を用意しておくことになるん
ジャマイカ
>その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
ならない。ならずに済ませられることができる
補完する演算子のテンプレートの導入範囲を名前空間で限定すればおk↓↓↓
ttps://ideone.com/p4FS43
21行目のOP_EQ_FOO_ENを定義してもしなくてもビルドが通り、Foo::operator==()の呼び出し回数を除き同じ結果になる。
ただし、operator==()についてはちょっぴり闇が深いことがわかった。
名前空間std::rel_opsにはoperator==()テンプレートが存在しない
上のサンプルではstd::rel_ops名前空間に無理矢理operator==()テンプレートを追加したが、
実際にやるときは独自の名前空間でoperator<()以外の全部(==、!=、>、<=、>=)を用意しておくことになるん
ジャマイカ
655デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 21:30:04.73ID:Dpz6ufMn0 あーすまん、目的を誤解してた
クラスのoperator ==の実装を省きたいんじゃなくて使う側で補完できればいいのか
クラスのoperator ==の実装を省きたいんじゃなくて使う側で補完できればいいのか
656デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 00:24:52.05ID:rSek34EXa 5年くらい前?にテンプレートプログラミングっぽい趣旨の本があったし、基本情報に何故かPrologと同じジャンルにテンプレートが言語として載ってる辺り論理型言語っぽい事ができるみたいだが、基本C++の1機能でしか無いから、知ってる人は少ないんじゃ無い?
俺も知らない。
俺も知らない。
657デフォルトの名無しさん (ワッチョイ 2e80-tQZR)
2018/09/24(月) 00:56:28.11ID:cIWp1XlU0 C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014
C++ 標準化委員のεπιστημη の本だろ。
ドワンゴ江添亮も、需要があれば、こういう本を書きたいって言ってたけど
επιστημη(えぴすてーめー)・高橋 晶、2014
C++ 標準化委員のεπιστημη の本だろ。
ドワンゴ江添亮も、需要があれば、こういう本を書きたいって言ってたけど
658デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 01:06:54.52ID:rSek34EXa それそれ。
出来るっぽいってのは知ってても、実際できてる奴少ないと思われ。
出来るっぽいってのは知ってても、実際できてる奴少ないと思われ。
659デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/24(月) 01:14:19.28ID:Kxio7RVg0 テンプレート使うのに
いちいちそんな悩むもんなんか
なにかを参考にしたいようだが
たとえばtraits乱用してるようなのは読む必要もないし
逆にマネする必要がないわ
いちいちそんな悩むもんなんか
なにかを参考にしたいようだが
たとえばtraits乱用してるようなのは読む必要もないし
逆にマネする必要がないわ
660デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 01:21:07.01ID:rSek34EXa 俺も気にした事ないけど、気になる奴は気になるんだろう。
俺の場合は整数型をどうやって文字列型にしてるんだ?ってのが疑問でむしろアセンブラに走って頭捻って理解した。
まあ人間そんなもん。
俺の場合は整数型をどうやって文字列型にしてるんだ?ってのが疑問でむしろアセンブラに走って頭捻って理解した。
まあ人間そんなもん。
661デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/24(月) 01:37:53.34ID:orHhPIQU0 テンプレートはC++の必須教養だと思ってるけど、別になくても困らないしな・・・
662デフォルトの名無しさん (ワッチョイ 2d8a-9DVt)
2018/09/24(月) 01:47:51.69ID:sBjtzBeV0663デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 01:54:17.59ID:XuY/8j5Q0 >>656->>661
同感
はちみつと言い争ったときに
>>デザインの風潮というものは間違いなくある。
>そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
とか書いたけど
実践ではなく仕様メインで覚えてる人(趣味でC++の知識を集めるのがメインの人であり、アマチュア)は
「これからの時代はテンプレート使った総称的プログラミングが主流」
みたいなパラダイムの変化を訴えてるけど、それはっきり言って素人が見れるコードでだけだから・・・
(C++標準ライブラリやBoost等)
テンプレート使ってとことん汎用性を高めたライブラリなんか、普通のソフト開発の現場では使われんわ
あまりにも時間がかかりすぎる
そういうごくごく一部の偏ったソースしか読んだことないから誤解するんだろう
で、その誤解した趣味グラマのネット上の言説やライターが書いた本を読んで、
初心者がC++に挫折して去っていくという・・・・・
C++なんか最初はベターCでいいんだよはっきり言って
あと最近ネット見てて(C++の)オブジェクト指向とかC時代の古いノウハウの解説が少ないのは、
単にとっくに出尽くしたからだからな、最近始めたやつは誤解したらだめよ
同感
はちみつと言い争ったときに
>>デザインの風潮というものは間違いなくある。
>そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
とか書いたけど
実践ではなく仕様メインで覚えてる人(趣味でC++の知識を集めるのがメインの人であり、アマチュア)は
「これからの時代はテンプレート使った総称的プログラミングが主流」
みたいなパラダイムの変化を訴えてるけど、それはっきり言って素人が見れるコードでだけだから・・・
(C++標準ライブラリやBoost等)
テンプレート使ってとことん汎用性を高めたライブラリなんか、普通のソフト開発の現場では使われんわ
あまりにも時間がかかりすぎる
そういうごくごく一部の偏ったソースしか読んだことないから誤解するんだろう
で、その誤解した趣味グラマのネット上の言説やライターが書いた本を読んで、
初心者がC++に挫折して去っていくという・・・・・
C++なんか最初はベターCでいいんだよはっきり言って
あと最近ネット見てて(C++の)オブジェクト指向とかC時代の古いノウハウの解説が少ないのは、
単にとっくに出尽くしたからだからな、最近始めたやつは誤解したらだめよ
664デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:00:05.34ID:XuY/8j5Q0 訂正
Xテンプレート使ってとことん汎用性を高めたライブラリなんか
○テンプレート使ってとことん汎用性を高める開発手法なんか
Xテンプレート使ってとことん汎用性を高めたライブラリなんか
○テンプレート使ってとことん汎用性を高める開発手法なんか
665はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 02:14:19.64ID:tUW1+gfS0 >>663
「何もかもを継承構造で解決しようとするな」の
ひとつとしてテンプレート (を C++ なら利用することになるプロトコル指向的デザイン) が出たんだし、
C++ にコンセプトの概念を持ち込もうとする機運があるほどには活用比率も高まるだろう、という程度の主張なのに、
「とことん汎用性を持たせるべき」とか「主流になる」みたいな拡大解釈はやめてくれよ。
俺はそんなこと主張してないからね!
「何もかもを継承構造で解決しようとするな」の
ひとつとしてテンプレート (を C++ なら利用することになるプロトコル指向的デザイン) が出たんだし、
C++ にコンセプトの概念を持ち込もうとする機運があるほどには活用比率も高まるだろう、という程度の主張なのに、
「とことん汎用性を持たせるべき」とか「主流になる」みたいな拡大解釈はやめてくれよ。
俺はそんなこと主張してないからね!
666デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:32:05.77ID:XuY/8j5Q0 >>665
しつこいぞ
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって
「おかしな流行が発生して初心者を惑わした」、に対して反論したんだろ?嘘つくなよ
>俺はそんなこと主張してないからね!
主流になる、って意味だろ?これ↓
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
ちなみに
>コンセプトの概念を持ち込もうとする機運
コンセプトは標準化委員会や禿が言い出したことだぞ
導入されたら素晴らしいとは思うが、元々はテンプレートを使ったコードのエラーメッセージをどうにかすることと
テンプレートパラメータで満たすべき要件をコメントではなくコードで示せるようにすることだ
プロトコル指向は聞いたことないが、それはコンセプトで可能になるおまけ程度だろ
しかもそれを利用するにはテンプレート必須なわけで、コンセプトが入ろうが、
クラスなどが実際どういう仕組みなのか程度のことは把握してないと、初心者が手を出せるようなものではないし
出させるべきでもない
しつこいぞ
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって
「おかしな流行が発生して初心者を惑わした」、に対して反論したんだろ?嘘つくなよ
>俺はそんなこと主張してないからね!
主流になる、って意味だろ?これ↓
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
ちなみに
>コンセプトの概念を持ち込もうとする機運
コンセプトは標準化委員会や禿が言い出したことだぞ
導入されたら素晴らしいとは思うが、元々はテンプレートを使ったコードのエラーメッセージをどうにかすることと
テンプレートパラメータで満たすべき要件をコメントではなくコードで示せるようにすることだ
プロトコル指向は聞いたことないが、それはコンセプトで可能になるおまけ程度だろ
しかもそれを利用するにはテンプレート必須なわけで、コンセプトが入ろうが、
クラスなどが実際どういう仕組みなのか程度のことは把握してないと、初心者が手を出せるようなものではないし
出させるべきでもない
667はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 02:45:26.39ID:tUW1+gfS0 >>666
変な (教え方なり使い方なりが下手くそな) 流行があったということを以て
テンプレートの活用を全否定するような言い分に反論したんだよ。
テンプレートが無くて良いと思ってるわけじゃないんだろ?
> 主流になる、って意味だろ?
今までが継承構造に頼りすぎだったのが是正されるという意味だ。
初心者への教え方については、また別の話。
ベターCからで良いという意味のことは D&E にも書かれてる基礎理念だから
そこは疑ってない。
変な (教え方なり使い方なりが下手くそな) 流行があったということを以て
テンプレートの活用を全否定するような言い分に反論したんだよ。
テンプレートが無くて良いと思ってるわけじゃないんだろ?
> 主流になる、って意味だろ?
今までが継承構造に頼りすぎだったのが是正されるという意味だ。
初心者への教え方については、また別の話。
ベターCからで良いという意味のことは D&E にも書かれてる基礎理念だから
そこは疑ってない。
668デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:59:37.96ID:XuY/8j5Q0 >テンプレートの活用を全否定するような言い分に反論したんだよ。
>>587と>>588を100回読み直せボケが
悪いけど、お前まともにメタプログラミングやってないだろ?
まともに活用して利点・欠点をはっきりわかってないやつが何偉そうに語ってんの?
しかもその理由で反論したんなら、なおさらポリモーフィズムの話で論破されただろ、
なんで認めずに自分の主張の意味を途中から変えてまで言い返してんの?
図星突かれて気分が悪いってか?
>今までが継承構造に頼りすぎだったのが是正される
誰が頼りすぎてたの??今までっていつまで?
>初心者への教え方については、また別の話
今まで何度も「こいつ初心者にテンプレート勧めてるよ・・・・何考えてんだ」と思ってたんですが
どの口で言ってんだ
>>587と>>588を100回読み直せボケが
悪いけど、お前まともにメタプログラミングやってないだろ?
まともに活用して利点・欠点をはっきりわかってないやつが何偉そうに語ってんの?
しかもその理由で反論したんなら、なおさらポリモーフィズムの話で論破されただろ、
なんで認めずに自分の主張の意味を途中から変えてまで言い返してんの?
図星突かれて気分が悪いってか?
>今までが継承構造に頼りすぎだったのが是正される
誰が頼りすぎてたの??今までっていつまで?
>初心者への教え方については、また別の話
今まで何度も「こいつ初心者にテンプレート勧めてるよ・・・・何考えてんだ」と思ってたんですが
どの口で言ってんだ
669はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:17:34.86ID:tUW1+gfS0 >>668
ポリモーフィズムの話ってなんだ?
初心者へじゃなくて、
君に、テンプレートの話はしてたつもりだが。
(ID 変わってるから他の人だったらスマソ)
他の人にアンカーを付けてテンプレートの話はしてないだろう。
ポリモーフィズムの話ってなんだ?
初心者へじゃなくて、
君に、テンプレートの話はしてたつもりだが。
(ID 変わってるから他の人だったらスマソ)
他の人にアンカーを付けてテンプレートの話はしてないだろう。
670はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:38:10.37ID:tUW1+gfS0671はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:48:16.31ID:tUW1+gfS0 「美味しんぼには我慢ならん」
「おい、辛抱しろ」
「おい、辛抱しろ」
672はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:48:58.75ID:tUW1+gfS0 誤爆した。 ごめん。
673デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/24(月) 09:51:46.55ID:dKKNaNpJ0 本当にテンプレートが必要なものってだいたいSTLに揃ってる印象。
あとはTBBみたいにある程度低いレイヤーの抽象化ではどうしても必要にはなる。
しかしこの種類のライブラリってのは本当に信用できる奴が作ったもの以外は
使いたくねーんだわ。
めちゃくちゃデバッグコスト高いからね。
そういう意味で一般プログラマーが実装するってのは実践的ではない。
あとはTBBみたいにある程度低いレイヤーの抽象化ではどうしても必要にはなる。
しかしこの種類のライブラリってのは本当に信用できる奴が作ったもの以外は
使いたくねーんだわ。
めちゃくちゃデバッグコスト高いからね。
そういう意味で一般プログラマーが実装するってのは実践的ではない。
674デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 10:18:16.36ID:cpSL59m30 テンプレートは型の定義をすり替えるために使うもの
#ifdefで型切り替える方がもっと糞だからそこはテンプレートにするべき
それ以上の凝った事はしないほうがいいね
#ifdefで型切り替える方がもっと糞だからそこはテンプレートにするべき
それ以上の凝った事はしないほうがいいね
675デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 11:22:17.38ID:GIs1tf8Y0 頼りすぎつーか逆だと思うぜ
コンテナの要件なんかインターフェイスにすればすっきりするのに
紙マニュアル(pdf含む)でガタガタ書かれた口約束とかすげーイヤ
歴史的に見てもそれをやるのに充分な言語機能がもうあったのに
コンテナの要件なんかインターフェイスにすればすっきりするのに
紙マニュアル(pdf含む)でガタガタ書かれた口約束とかすげーイヤ
歴史的に見てもそれをやるのに充分な言語機能がもうあったのに
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 11:36:08.69ID:tUW1+gfS0 >>675
現状の C++ では型の制約を表すには意味不明な SFINAE で回りくどくやってて
初心者には使いこなせない (中級者でも不安があったり面倒だったりする)
という話の文脈だから、言語機能が充分だというのはちょっと変な立場だ。
現状の C++ では型の制約を表すには意味不明な SFINAE で回りくどくやってて
初心者には使いこなせない (中級者でも不安があったり面倒だったりする)
という話の文脈だから、言語機能が充分だというのはちょっと変な立場だ。
677デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 11:43:09.69ID:IXp/Ejzw0 どうーがんばっても停止性問題は機械的に解けないケースを無くせないのだから
プログラミング自体をアルゴリズム化する企てはどこかで行き詰る
藻前らは行き詰まりかたの良し悪しを議論しているにすぎないのだガハハハハハハ
プログラミング自体をアルゴリズム化する企てはどこかで行き詰る
藻前らは行き詰まりかたの良し悪しを議論しているにすぎないのだガハハハハハハ
678はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 11:47:19.43ID:tUW1+gfS0 >>675-676
ひょっとして抽象クラスでやったらいいという話だろうか。
Java とかから来た人はそういうことをやりがちだけど、 C++ の設計理念からすると、
少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う。
ひょっとして抽象クラスでやったらいいという話だろうか。
Java とかから来た人はそういうことをやりがちだけど、 C++ の設計理念からすると、
少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う。
679デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 12:24:10.58ID:GIs1tf8Y0 >>678
動的結合のコストは関数ポインタなみにはっきりしてるだろ
動的結合のコストは関数ポインタなみにはっきりしてるだろ
680デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 12:28:24.97ID:cpSL59m30 インターフェース(=データメンバーなし抽象クラス)は静的な型の制約を表現できないからダメ
681デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 12:58:55.73ID:XuY/8j5Q0 >>678
>C++ の設計理念からすると、
>少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う
滅茶苦茶言うな
https://cpplover.blogspot.com/2015/09/memoryresource.html
>>673
ついでに開発コストも高い
STLが優れてるのは、作者が長年コンテナについて熟考に熟考を重ねたライブラリだからであって
それを実現するためにテンプレートが使われたに過ぎない
テンプレート使ってりゃなんでも有用なライブラリになると勘違いしてるアホが増えた
>C++ の設計理念からすると、
>少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う
滅茶苦茶言うな
https://cpplover.blogspot.com/2015/09/memoryresource.html
>>673
ついでに開発コストも高い
STLが優れてるのは、作者が長年コンテナについて熟考に熟考を重ねたライブラリだからであって
それを実現するためにテンプレートが使われたに過ぎない
テンプレート使ってりゃなんでも有用なライブラリになると勘違いしてるアホが増えた
682デフォルトの名無しさん (ワッチョイ 4234-CvAF)
2018/09/24(月) 13:04:35.46ID:B4Me2M7J0 テンプレートは即席麺的な発想でライブラリのような寝かして熟成させるワイン的な使い方には向いていない
683デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 13:10:53.22ID:IXp/Ejzw0 インターフェースはあらゆるメソッドを最初から詰め込まねばならないからイヤソ(特に単一継承の場合
お禿様も自著でそういう傾向(あらゆるメソッドが基底クラスに集中する傾向があることをこっそりカミングアウトしていたはず
テンプレートにはそういう制約がない
型引数Tにadd()メソッドがあるものとしてテンプレートを書いたら、add()メソッドがある既存クラス全部にそのテンプレートが使える
というわけで、インターフェースはそれ自体静的な型の制約のつもりなのかもしれんが、
真にかけたい制約(上の例でいうとadd()メソッドの存在だけを問題にしたいケース)に対して不必要に過剰になることが多いキモス
あとインターフェースだとコンテナの実現は具体的にはどうするんじゃ…
仮想関数テーブル参照の実行時コストだけでも許容し難いのに、間接参照がさらに必要になるんじゃ…
お禿様も自著でそういう傾向(あらゆるメソッドが基底クラスに集中する傾向があることをこっそりカミングアウトしていたはず
テンプレートにはそういう制約がない
型引数Tにadd()メソッドがあるものとしてテンプレートを書いたら、add()メソッドがある既存クラス全部にそのテンプレートが使える
というわけで、インターフェースはそれ自体静的な型の制約のつもりなのかもしれんが、
真にかけたい制約(上の例でいうとadd()メソッドの存在だけを問題にしたいケース)に対して不必要に過剰になることが多いキモス
あとインターフェースだとコンテナの実現は具体的にはどうするんじゃ…
仮想関数テーブル参照の実行時コストだけでも許容し難いのに、間接参照がさらに必要になるんじゃ…
684デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 13:22:48.05ID:GIs1tf8Y0 インターフェイスを単一継承前提で考えるって、どんな教育を受けるとそうなるのかな
numeric_limits<uintmax_t>::max()歩譲って単一継承ってことにしても
最初から全部詰め込みなんてハメにはあまりならないし
あらゆるメソッドが基底クラスに集中するなんて事例あるか?
俺は空想論だと断言するぞ
Smalltalkのobjectみたいなクラスに何が置けるんだよ
あと、なんか仮想テーブルのコストが云々いってるやつが複数いるようだが
具体的にどのくらいか、せめてオーダーくらいわかっているのか
numeric_limits<uintmax_t>::max()歩譲って単一継承ってことにしても
最初から全部詰め込みなんてハメにはあまりならないし
あらゆるメソッドが基底クラスに集中するなんて事例あるか?
俺は空想論だと断言するぞ
Smalltalkのobjectみたいなクラスに何が置けるんだよ
あと、なんか仮想テーブルのコストが云々いってるやつが複数いるようだが
具体的にどのくらいか、せめてオーダーくらいわかっているのか
685デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 13:35:23.36ID:cpSL59m30 オーダーの問題じゃなくて、C++にはゼロオーバーヘッドの原則があるんだから
ゼロオーバーヘッドに出来るものはゼロオーバーヘッドにするんだよ、標準はその手本なんだから
それにオーダーなんか処理内容でなんぼでも変わるだろ
せいぜい数十万要素のコンテナしか使わないプログラムだから仮想テーブルなんかどうでもいいと主張する奴の言うことは正しいかもしれないが
数兆個の要素を扱う人にはそんなもの慰めにならん
ゼロオーバーヘッドに出来るものはゼロオーバーヘッドにするんだよ、標準はその手本なんだから
それにオーダーなんか処理内容でなんぼでも変わるだろ
せいぜい数十万要素のコンテナしか使わないプログラムだから仮想テーブルなんかどうでもいいと主張する奴の言うことは正しいかもしれないが
数兆個の要素を扱う人にはそんなもの慰めにならん
686デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 13:56:47.91ID:IXp/Ejzw0 >>684
>インターフェイスを単一継承前提で考えるって、どんな教育を受けるとそうなるのかな
型に対する静的制約を実現するにあたり、多重継承は助けにならないからですだが…
>あらゆるメソッドが基底クラスに集中するなんて事例あるか?
上とまとめて理由を述べる
今、add()メソッドを備えるインターフェースA、sub()メソッドを備えるインターフェースBがあったとして、
加減算ができる具象クラスDやEは、それぞれAとBを多重継承したら一応はできる ・・・(1)
しかし、このバージョンのDやEは「加減算ができるクラス」という静的制約を満たしているとは言えない
なぜなら、DとEは全く別のクラス扱いになるから、DとEを共通に扱える関数を書けないので…
「加減算ができるクラス」という制約の正しい書き方は、AとBを継承するインターフェースCを定義して、
DやEにCを継承させる(単一継承)とらざるおえない ・・・(2)
なおいうまでもないことだがテンプレートにはそんな制限は無い。(1)のバージョンのD、Eに対して
問題なく「加減算ができるクラス」という制約をかけられる(Cにメソッドを集中させる必要が一切ナッシング
>インターフェイスを単一継承前提で考えるって、どんな教育を受けるとそうなるのかな
型に対する静的制約を実現するにあたり、多重継承は助けにならないからですだが…
>あらゆるメソッドが基底クラスに集中するなんて事例あるか?
上とまとめて理由を述べる
今、add()メソッドを備えるインターフェースA、sub()メソッドを備えるインターフェースBがあったとして、
加減算ができる具象クラスDやEは、それぞれAとBを多重継承したら一応はできる ・・・(1)
しかし、このバージョンのDやEは「加減算ができるクラス」という静的制約を満たしているとは言えない
なぜなら、DとEは全く別のクラス扱いになるから、DとEを共通に扱える関数を書けないので…
「加減算ができるクラス」という制約の正しい書き方は、AとBを継承するインターフェースCを定義して、
DやEにCを継承させる(単一継承)とらざるおえない ・・・(2)
なおいうまでもないことだがテンプレートにはそんな制限は無い。(1)のバージョンのD、Eに対して
問題なく「加減算ができるクラス」という制約をかけられる(Cにメソッドを集中させる必要が一切ナッシング
687デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 14:02:13.87ID:IXp/Ejzw0 ていうか最後の2行で筆が滑ったorz
テンプレートで「加減算ができるクラス」という制約をかけるにはインターフェースA、Bもそもそも要らん
スゲー便利
テンプレートで「加減算ができるクラス」という制約をかけるにはインターフェースA、Bもそもそも要らん
スゲー便利
688デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/24(月) 14:25:40.72ID:yuMzZsdXa templateはダックタイピングだとおもう
689はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 15:09:08.71ID:tUW1+gfS0 どう説明したもんかと思ったけど、 >>683 の説明が分かりやすいな。
(Java でいうところの) インターフェイスは型の性質を事前に網羅しなきゃ
全体のデザインが定まらない。
関数が要求する性質 (インターフェイス) が増えた時に元の定義をいじるか、
mixin のような形で継承関係を作ることになる。
ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で
考えればインターフェイスを使ったところであまり解決にならない。
型制約 (コンセプト) は関数の側に付加するものなので、後付けが簡単だ。
結果的に型の側はその性質を持たなきゃならないことにはかわりないが、
性質を追加するのに元のクラス定義を弄らなくて済む。
-----------
最初の設計がキッチリしてたら、
クラス指向的なスタイルの方が混乱が少なくて良いかもしれないなと思い始めてきた。
でも、現実にはそうではない後付けだらけじゃん? とも思ってるわけ。
(Java でいうところの) インターフェイスは型の性質を事前に網羅しなきゃ
全体のデザインが定まらない。
関数が要求する性質 (インターフェイス) が増えた時に元の定義をいじるか、
mixin のような形で継承関係を作ることになる。
ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で
考えればインターフェイスを使ったところであまり解決にならない。
型制約 (コンセプト) は関数の側に付加するものなので、後付けが簡単だ。
結果的に型の側はその性質を持たなきゃならないことにはかわりないが、
性質を追加するのに元のクラス定義を弄らなくて済む。
-----------
最初の設計がキッチリしてたら、
クラス指向的なスタイルの方が混乱が少なくて良いかもしれないなと思い始めてきた。
でも、現実にはそうではない後付けだらけじゃん? とも思ってるわけ。
690デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 15:15:20.89ID:GIs1tf8Y0691デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 15:32:49.32ID:XuY/8j5Q0 >>689
コンセプトを盲信しすぎだろ
あくまで要件をコードで示せるだけだっての
それこそSTLには必ず導入されるべきものだけど、そのSTLでの不満、
つまりInputIteratorだのなんだのの要件をいちいちリファレンス参照しないとわからなかった(>>675)から
必要とされたわけで
はちみつとかは多分STLべったりで、それ以外のライブラリを読んだり
まともにソフト書いたことないから、STLがほとんど出てこない状況ってのを経験してないんだろ
>ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で考えれば
話を広げすぎ。
型の制約という意味でいえば、現状コンセプトを待つしかないが
多分>>684が言ってるのは、Modern C++ Designで言うところのポリシークラスみたいな話じゃね?(違うかもしれんけど
この場合はあくまで要件定義なので当てはまらないと思うけど、
>いらん継承関係を作るのは良くない
これは暴言。Andrei Alexandrescuに言ってくれば?
ポリシークラスのような、継承によって機能を取り込む設計も非常に便利だし、それこそSTLでもあちこちで使われてるんだがww
あと後半チラ裏にも程がある。何様だよ
コンセプトを盲信しすぎだろ
あくまで要件をコードで示せるだけだっての
それこそSTLには必ず導入されるべきものだけど、そのSTLでの不満、
つまりInputIteratorだのなんだのの要件をいちいちリファレンス参照しないとわからなかった(>>675)から
必要とされたわけで
はちみつとかは多分STLべったりで、それ以外のライブラリを読んだり
まともにソフト書いたことないから、STLがほとんど出てこない状況ってのを経験してないんだろ
>ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で考えれば
話を広げすぎ。
型の制約という意味でいえば、現状コンセプトを待つしかないが
多分>>684が言ってるのは、Modern C++ Designで言うところのポリシークラスみたいな話じゃね?(違うかもしれんけど
この場合はあくまで要件定義なので当てはまらないと思うけど、
>いらん継承関係を作るのは良くない
これは暴言。Andrei Alexandrescuに言ってくれば?
ポリシークラスのような、継承によって機能を取り込む設計も非常に便利だし、それこそSTLでもあちこちで使われてるんだがww
あと後半チラ裏にも程がある。何様だよ
692デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 15:33:05.07ID:cpSL59m30 Container<T>のbegin()が返すのはIterator<T>だとか
Matrix<M,N>とVector<K>はN==Kのときだけ掛け算できて結果はVector<M>だとか
Converter<V,W>とQueue<X>とProcessor<Y,Z>を持ってたらWとXとYはコンパチブルじゃなきゃいけないとか
そういうのが型の静的制約
Matrix<M,N>とVector<K>はN==Kのときだけ掛け算できて結果はVector<M>だとか
Converter<V,W>とQueue<X>とProcessor<Y,Z>を持ってたらWとXとYはコンパチブルじゃなきゃいけないとか
そういうのが型の静的制約
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】日本産牛肉の対中国輸出再開協議が中止 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★3 [BFU★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★4 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 中国政府、日本人のビザ免除停止、鬼滅の刃公開停止を検討へ [271912485]
- 【実況】博衣こよりのえちえち雑談🧪★2
- 高市早苗って戦後最悪の総理大臣なのでは🤔? [929293504]
- 【実況】博衣こよりのえちえち雑談🧪
- 【悲報】自民党「聞いてないよー」 [616817505]
- 【高市速報】トヨタ社長、MAGA帽子をかぶって登場し世界を震撼させる [462275543]
