1 名前:デフォルトの名無しさん [2018/08/27(月) 16:02:00.94 ID:vY3QDx2y0.net] 次スレを立てる時は本文の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/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
709 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:03:46.76 ID:cpSL59m30.net] じゃあ練習問題だ IntVector::begin()の戻り値はIntIteratorで、IntIterator::value()はintを返す StringVector::begin()はStringIteratorで、StringIterator::value()はstringを返す そういう制約を表現するインターフェースIVectorを具体的に書いてみよう! 出来やしないのは手を動かせばすぐわかる
710 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:06:21.46 ID:cpSL59m30.net] ああこれだけだと出来ちゃうか end()もあってbegin()と同じ型のイテレーターを返すっていう制約も付けてちょうだい
711 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:08:34.73 ID:GIs1tf8Y0.net] #define interface struct template <typename T> interface IVector { class iterator; virtual iterator begin() const = 0; };
712 名前:はちみつ餃子 mailto:sage [2018/09/24(月) 16:14:35.10 ID:tUW1+gfS0.net] >>692 ポリシークラスは注入 (?) すべきポリシーをパラメタ化してるだけで、 何をパラメタにするかというデザインがきちんとしてれば有用だし、 いらん継承だとは思わないよ。 でも、現実には後になってそれがわかることもあるよねっていう話。
713 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:24:48.03 ID:cpSL59m30.net] >>697 テンプレート使ってんじゃねえよ雑魚
714 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:34:08.72 ID:GIs1tf8Y0.net] >>699 は? 後出しで言い訳してんじゃねえよ蛸助 インターフェイスがテンプレートになってる実例をまさか知らんのか?w
715 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:37:21.35 ID:cpSL59m30.net] お前の主張通り継承で全部やれよ そういう所が雑魚なんだよw
716 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:38:54.75 ID:GIs1tf8Y0.net] 捨て台詞吐いて逃亡かw 追わねえよくっだらねえ
717 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 16:41:06.83 ID:cpSL59m30.net] そっくりそのままお返ししますわw テンプレートと継承の出来ることと出来ないことの区別がつくまで二度と下らない妄言吐くなよ
718 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 17:18:02.91 ID:XuY/8j5Q0.net] >>698 >現実には後になってそれがわかることも それは >何をパラメタにするかというデザインがきちんとしてれば が後で変更になることもある、ってことだろうけど そこまでの変更があったら、結局元の定義に手を出さなきゃいけないのは どんな設計でも同じことだと思うけどなぁ >性質を追加するのに元のクラス定義を弄らなくて済む と言ってたが、それは結局関数とかでクラスの要件を必要以上に大きくしないように 例えばallocator_traitsみたいに、色々手間をかけて、利用するクラスへの依存を減らすのと同じじゃね? 俺にはそういうイメージしか沸かないんだが コンセプトマップってそういうことだろ 結局テンプレートであれこれ書くことになるか、コンセプトマップであれこれ書くことになるか、ってだけ (=開発コストは高い) std::vectorだって、例えばアロケータは初期化時に渡さないといけないし コピーとかしたときにアロケータはコピーしてくれなかったと思うが それが不便だという声もある(ここでたまに取り上げられるEASTLの開発動機で触れられてる あと、アロケータは型に依存するけど、メモリ確保なんてのはそもそも型は関係ないので アロケータのあの設計は失敗かもね、というのもある(同じくEASTLでも触れられてる それに対する代替案として、上で挙げたstd::pmr::memory_resourceが出てきたわけだけど、 今更STLの基本設計は変えられないのでpolymorphic_allocatorでラップするということになった もしvectorがポリシークラスを受け取って、アロケータやメモリ管理についてもっと汎用化してたら こういう問題は起きなかった(クッソ複雑になってるだろうけど) これコンセプトでどうにかなるか?後になってわかってもどうにもならんよ
719 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 17:46:45.01 ID:yIbiTIWcr.net] ヒープ領域にインスタンスを作りたいときってどうしてもポインタを意識しないとダメなの? MyClass abc; みたいに宣言したいんだが。 MyClass* abc; abc = new MyClass; みたいにするしか方法ないの? ヒープに作りたい理由は、巨大なオブジェクトだから。 ちなみにスマートポインタは使えない (icpc 12.0.4)。
720 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 17:53:54.47 ID:CvpxIDb80.net] コンパイラに指示できるか、という意味ではないよ そんなのあったも紛らわしいだけだと思うけど
721 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 18:26:32.41 ID:sIOpRstjM.net] >>705 MyClass& abc = *new MyClass; でいけるかも知らんけど十中八九delete忘れるし後から見て分かりにくいだけだから俺ならやらない
722 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 18:31:59.03 ID:cpSL59m30.net] struct MyClassHolder { MyClass* p; MyClassHolder(): p(new MyClass()){} ~ MyClassHolder(){delete p;} }; とか作っとけばいいんじゃない 自分でスマポ書いてるのと同じだけど
723 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 18:47:38.62 ID:yIbiTIWcr.net] >>708 ありがとうございます。 参考にします。 ちなみにポインタをどうこうしたくない理由は、これまで MyClass のインスタンスを参照渡しするように作っていた関数を、できるだけ変更したくないからです。 参照渡しをポインタ渡しに変えて、関数内に適宜アスタリスクを挿入するだけですか? 考えるのもしんどいです。
724 名前:はちみつ餃子 mailto:sage [2018/09/24(月) 18:55:55.79 ID:tUW1+gfS0.net] >>704 > 色々手間をかけて、利用するクラスへの依存を減らすのと同じじゃね? その通りだよ。 プロトコル指向でいうプロトコルは C++ で言うならまさにトレイツに相当すると思う。 (C++ では実装を直接的に強制する方法ではないけど。) 継承構造ではなく性質でジェネリック関数を使うってだけ。 継承で表すよりも性質で表現する方がたぶん記述は細分化されることになるので、 それが手間かもしれないし、 関連するものがとっちらかる感じはあると思う。 だけど「こういう型」というよりは「こういう性質」という方がプログラムが分かりやすくない? 既に述べたように拡張が楽というのもある。 ただ、プロトコル指向的デザインでは機能を追加することは出来ても 既に問題が生じているものをスパッと綺麗に解決できるわけではないので、 いつでも元の定義を弄らずに済むほど万能とはさすがに言わないよ。 vector なんてそれこそ達人たちが検証してるだろうから、 私が思いつくようなことが入り込む余地は無いだろうし。 そこらへんは程度問題なので、積極的に (あるいは消極的に) (テンプレートを用いた) プロトコル指向的デザインを 使うのが割に合わないという場面もそれなりに多くあると思う。 繰返すけど、そこまで万能と思ってるわけじゃない。
725 名前: mailto:sage [2018/09/24(月) 19:02:18.61 ID:63DR0NZS0.net] >>705 static 宣言する、というのはありな状況ですか? static MyClass abc;
726 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:02:38.38 ID:XuY/8j5Q0.net] こいつ金慶珠みたいなやっちゃな・・・・マジめんどくさい
727 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:04:43.22 ID:XuY/8j5Q0.net] >>712 は>>710 宛 >>709 関数の方を変えなくても、渡すとこで auto a = hoge(*pMyClass); でいんじゃね? それも大変なら>>708 みたいにラップするしかないけど
728 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:14:36.90 ID:yIbiTIWcr.net] >>711 オブジェクトのサイズが動的に変わるので、難しいです(合ってるかな?) >>713 > 関数の方を変えなくても、渡すとこで > auto a = hoge(*pMyClass); > でいんじゃね? > それも大変なら>>708 みたいにラップするしかないけど void hoge(MyClass abc); なる関数 hoge() に、 MyClass* pabc; pabc = new MyClass; hoge(*pabc); とする、ということですよね? この方法では、関数呼び出し時にコピーコンストラクタが呼ばれますか? それとも参照渡しのように、実体(?)が渡されるのでしょうか。
729 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:30:44.68 ID:XuY/8j5Q0.net] >>714 呼ばれないよ 参照渡しと同じことになる
730 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:31:36.39 ID:XuY/8j5Q0.net] あ、もちろん関数側の受け取りを参照のままにしてれば、だけどね
731 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:42:51.66 ID:E4VB1fuR0.net] >>709 MyClass abc1; foo(abc1); MyClass* abc2 = new MyClass; foo(*abc2); delete abc2;
732 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:44:00.35 ID:E4VB1fuR0.net] あっ、既に出てたわ
733 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 19:51:26.90 ID:yIbiTIWcr.net] >>715-718 すみません。 >>714 は間違っていますね。 hoge() の定義は void hoge(MyClass& abc); でした。 ありがとうございます。 提案していただいた方法なら、関数側はほぼ何も変えないでできそうです。 初歩的な質問に付き合っていただき感謝します。
734 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 20:06:20.22 ID:I/nCcJf20.net] https://ideone.com/l7t0qz 上から取れないマウントを取りに行くスタイル。
735 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 20:23:29.03 ID:SA5x5JnZ0.net] ボレロ村上さんや江添さんみたいなプログラマーになりたいんですが、彼等はどうやってC++についてあんなに詳しいのでしょうか?
736 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 20:29:49.13 ID:I/nCcJf20.net] どっちも早いころからパソコンを触っており、 早期にはこんなに言語がなく血反吐吐いて低級言語を覚える必要が少しあり、今はその応用で食ってける。 C/C++も今ほどライブラリがなく、自作するか引っ張ってくるしかなかったうえにそもそもコード系のシャルネットワークがなかった。
737 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 20:40:24.56 ID:dKKNaNpJ0.net] 前提として奴らは別にプログラマーとして有名なわけではない。 コードを書く能力と有名なことが反比例しているわけだがそれでもいいなら 彼らの真似事してれば同じようになれるんじゃね?
738 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 20:50:32.86 ID:I/nCcJf20.net] まぁ、名前を聞くようになったのはツイッターあたりからやね。 江添氏はコードのお作法がおかしいと食いついたりしてたし、委員会に近いところにいたのでそういう情報を発していた。 けど、個人ではあまりコードは書いてないみたいだな。 ボレロ氏は高専言いっててそこらへんで色々学んでconstexprライブラリで名前を売ったってところはある。 その後縮小して最近コードを書いているという話は聞いてないような。 どっちも有名になったのはこの世の不満とオタクの人権みたいなのを発していたら有名になったってところはある。と思ってる。
739 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 21:16:51.40 ID:GIs1tf8Y0.net] 誰にでもウイークポイントはある そこを苛める遊びに固執する阿呆は誰からも何も学べないまま 自らがウイークポイントのみからなるコンパクト星として成長するのみ 世の中の誰からも軽蔑しか受けない天涯孤独な存在だ
740 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 21:32:17.37 ID:XuY/8j5Q0.net] まぁ江添氏は委員会の人間だしコードあんま書いてなくても日本のC++ユーザーのために 仕様の解説してくれてるしね ボレロ氏は・・・まぁその・・・・・生産性あるんだか無いんだかよくわからんライブラリ作ってるというか あれはあれで勉強になるけど・・・・w ただ初心者が「ああなりたい」ってよく言ってるのは理解に苦しむな 中途半端な知識でドヤ顔するのでなく、真摯に解説するサイトでも作ってくれりゃ価値があるけど 個人的には彼らを崇拝する人を見るたびに、もやもやした気分になる 言語は道具なんだから使ってなんぼやろ・・・
741 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 21:37:21.19 ID:SA5x5JnZ0.net] >>726 まあ結局言語は道具といっても、作ったものが革新性があったり、真似できないようなら人気を集めるような気がするんだよね 東方のZUNとか別にそこまで凄
742 名前:いゲームでもないけど、プログラマーとしてそこそこ尊敬されてる [] [ここ壊れてます]
743 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 21:59:39.82 ID:dKKNaNpJ0.net] 仕事でコード書いてたらc++の最新の仕様を追えないからやらない とか本気で言ってしまう奴は根本が腐ってると思うよ。 言ってて矛盾を感じないのかと。
744 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 22:02:16.29 ID:orHhPIQU0.net] 目標が名声なのか、C++理解度なのか・・・ 粛々とコード書き続けるのが一番
745 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 22:40:40.71 ID:SA5x5JnZ0.net] >>729 もちろん理解度なんだけど、何となく日本以外だと彼らしか目標とする人物が見つからなくて
746 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 22:55:21.63 ID:CvpxIDb80.net] ISO/IEC読んでworking draft読んでおまけにg++/clangの実装で読んで それでみんが知らなそうな重箱をつつくような仕様拾ってきてブログのネタに すればいいんでないの?知らんけど
747 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 22:59:57.25 ID:XuY/8j5Q0.net] まぁ日本だと、解説サイトで目につく人ってそんなもんか ZUN氏挙げるのははちょっと不思議だけど・・・ 以前東方に使われてる技術の解説がどこかにあったけど、 タスクシステムみたいな古くからある2Dシューティングの常套手段とかしか記憶にない (なんか驚くようなのもあったかもしれんけど 仕事で書いてると驚くようなコードとか設計をあちこちで見かけるけど、 そういうの書くのはやっぱ誰も知らない無名の職業プログラマだったりするよ
748 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 23:31:07.79 ID:nTOSaHPIH.net] >>732 今もそういう夢いっぱいな話あるの? 昔のファミコンソフトがスーパーテクニックの塊だった、みたいな 最近はリソースが潤沢にあって、手抜きのとりあえず動くプログラムが蔓延しているのだと思ってた
749 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 23:43:30.13 ID:CvpxIDb80.net] 今でもゲーム系はスーパーテクニック満載でしょ マルチコアCPUを90%以上使い倒す世界だからな、すげーわ
750 名前:デフォルトの名無しさん mailto:sage [2018/09/24(月) 23:47:03.19 ID:XuY/8j5Q0.net] >>733 自分は半端者なんで知識はアレだけど、GTAシリーズとかE
751 名前:Aのゲームとか ああいうのは今でもリソース必死に使い切ってるみたいよ (Game Programming Gemsとか読んでみたらその片鱗が見える) スーファミ時代のような変態的なのとは方向性が違ってきてるけど 大規模な開発の上でいかにパフォーマンス損なわずに開発効率を上げるかが重視されてる もちろん2Dのスマホゲーだったら全然使い切る必要ないだろうけど、そっち方面は詳しくない (多分言語もC#かSwiftが主流?移植性考えたらC#だろうな [] [ここ壊れてます]
752 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 00:00:26.48 ID:C9Mx85q+H.net] へぇ〜〜〜面白い 「どの業界は超人多い」みたいのあるんだろうか
753 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 00:05:28.27 ID:bpDEi/Vx0.net] 個人的にはF-35のソースが読んでみたいw
754 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 06:17:40.32 ID:NMIb1H0N0.net] >>737 さすがにF35のソースは見たことないけど、軍事関係や命に関わるコードはむしろ枯れた技術以外使わないんじゃないかな? ECUとかはとんでもなく古い考え方(ほぼ全ての変数がグローバル)で作られてるし。 まぁECUの場合それはそれでちゃんと理由があるんだけどね。
755 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 06:26:38.28 ID:cr5GGQ8dr.net] 多次元配列クラス Tensor があるとして、そのインスタンス a は a[2][5][3] のように要素アクセスできるとします。 unique_ptr<Tensor> pa(new Tensor); のように Tensor のスマートポインタを作った場合、pa の指してる Tensor への要素アクセスってどうやるのでしょうか。 「Tensor」の設計の詳細が必要であれば、boost の multi_array と同じとしていただいて問題ありません。
756 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 07:37:41.21 ID:ovBx3cXW0.net] (*pa)[2][5][3]
757 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 08:18:12.28 ID:fJAN4SxzM.net] >>732 自分は業務でC++使ってないのでそういう経験ができないのです‥ だからこそネットで活動してる人しか分からなくて‥ C++は全て独学するしかなくて、いい方法が無いかずっと考えてるのですが、結局ネットや本を見るしかなかったです
758 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 12:20:54.85 ID:h/rPVSH9r.net] >>740 すみません…… いろんなところにアスタリスクつけたり矢印つけたりしてみたのですが、そのパターンは見落としてました……
759 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 12:31:36.38 ID:HAbRzuEs0.net] >>742 見落とすというか…… 予め正解を知っておかないと思い付くのは難しいかもしれない そしてC++ではなくC言語的な原始的なポインタの話になるので、C++の教科書にそこまで詳しく載ってるかと言うと…… ttp://d.hatena.ne.jp/licheng/20130829/p2 ttp://www.nurs.or.jp/~sug/soft/tora/tora10.htm ttp://tecmemo.wpblog.jp/2016/09/10/cpp-multidimensional_array/ ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03010.html
760 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 13:46:02.72 ID:rTSM83rL0.net] >>738 組み込み系のノウハウなんだろうけど、大規模な組み込みってなってくると 一体どんな英知が詰まってるのかなーとか気になって 数百万行とかじゃなかったっけ・・ まぁMISRA-C++嫁、で終わる話かもしれんけどw >>741 自分も会社入る前とか、辞めて休業中は全部独学よ C++の知識だけに留まらず、何か作りたいもの作ってれば、 その分野での知識が嫌でも
761 名前:ツいてくると思う C++の知識だけに閉じこもって実際の開発(プロじゃなくて個人のフリーソフトでも)と 乖離した方向に行ってしまうのが一番怖い [] [ここ壊れてます]
762 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 13:48:52.76 ID:rTSM83rL0.net] そういえば以前ここで似たようなこと言ったら 「愚者は経験に学び、賢者は歴史に学ぶ」とか言われたなw ああいうアホになるんだよ、言語の知識だけに閉じこもって何も開発せずにいると
763 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 20:49:31.31 ID:ovBx3cXW0.net] 人は繰り返し、神は再帰する
764 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 21:21:29.13 ID:CZcrESgD0.net] >>744 >MISRA-C++ そんなものがあるのですか?
765 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 21:28:11.49 ID:LXnmrKE+0.net] >>747 ggrks
766 名前:デフォルトの名無しさん mailto:sage [2018/09/25(火) 22:53:16.70 ID:uqsQEMjV0.net] >>690 >(Java でいうところの) インターフェイスは型の性質を事前に網羅しなきゃ >全体のデザインが定まらない。 無いメソッドを呼べる言語は存在しないからこれは仕方が無い(ジャバに限らん ジャバに限らずインターフェースには利用者が絶対呼ぶメソッドだけではなく、 呼ぶかもしれないメソッドも全部packing listに入れねばならない点が無駄が大きい その代わり、インターフェースのメソッドはビルド単位内で一意な名前(インターフェース名)で (直接的あるいは間接的に)修飾されるから、同じメソッド名で違う機能のやつがあっても 衝突せず、安全性が保たれる テンプレートはこの点だけがちょっと劣る これ以外にテンプレートに欠点など無i
767 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 00:16:16.58 ID:XAX5fYE80.net] バイナリインターフェースが重要なシステムもあるわけで
768 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 13:25:47.21 ID:3bFkpdGnM.net] C++とシェルスクリプトの違いって何ですか? シェルスクリプトで出来ることでC++ができないこと C++が出来てシェルスクリプトで出来ないこととかそういう具体例を教えてほしいです。
769 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 13:28:14.24 ID:3bFkpdGnM.net] >>751 個人的に上げるとしたら、webのフロントエンド分野はインタプリタに勝てないと思います
770 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 13:35:28.26 ID:8zK/b6uE0.net] 比較の対象が違い杉
771 名前:さまよえる蟻人間 mailto:sage [2018/09/26(水) 13:35:54.34 ID:NuaJwewid.net] >>751 C++はコンパイルしないと動かない。シェルスクリプトはファイルの操作やバッチ処理が得意。
772 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 14:01:36.87 ID:3yW6iUgn0.net] >>751 デバドラをスクリプトで書いてみてくれ
773 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 14:29:30.26 ID:lYIfIhjTx.net] >>751 桃白白とラウチェン、マジンガーZとテコンVぐらい違う。
774 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 14:43:50.80 ID:zEt8XtGI0.net] >>751 GUI使ったアプリはシェルスクリプトでは無理
775 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 14:51:55.15 ID:3bFkpdGnM.net] >>754 確かにファイルの操作はそうですね >>755 確かにそういう分野はCですね >>756 例えが古くてパッとしませんでした‥ >>757 確かにOSにインストールするものはそうですね
776 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 15:12:38.31 ID:nKPhFdqbH.net] C++というかオブジェクト指向の質問かもしれないんですけど エクセルにデータを書き出すためのクラスがありましてメソッドがざっとこんな感じ ・データをファイルから読み込む ・シート作成(ここで以下のメソッドを呼び出す) ・シートAに書き出す ・シートBに書き出す ︙ ・シートEに書き出す 全体で1000行ほどなんですけど、例えばシートに書き出す共通部を親クラスにして、 それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。 ただ正直あまり意味が無いような気もするんですよ。クラスと言うには小さすぎるものになりそうですし。 何行超えたらでかいだろとか何行なんてクラスとしては小さすぎるだろみたいなラインってありますかね
777 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 15:23:36.10 ID:dRFURWqC0.net] それは単に メソッド シート作成(){ シートAに書き出す シートBに書き出す ︙ シートEに書き出す } ということ?それとも class A { メソッド シート作成(){ シートAに書き出す } class B { メソッド シート作成(){ シートBに書き出す } ということ? 前者ならクラス分ける意味がないと思うが。
778 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 15:33:15.98 ID:3yW6iUgn0.net] >>757 Tcl/Tk の立場は?
779 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 19:56:11.35 ID:oECBSnBC0.net] クラスは行数じゃなくて意味的にまとまってるかどうかだからな 意味のあるメンバがまとまってれば1万行の単一クラスがあってもいいし デタラメに寄り集められた50行の粗大ゴミクラスもある そういうもの
780 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 20:09:57.19 ID:LRnZd7JJa.net] >>762 数字が逆じゃないか?
781 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 20:16:07.55 ID:ME0063O80.net] >>759 >何行超えたらでかいだろとか何行なんてクラスとしては小さすぎるだろみたいなラインってありますかね ないよ 機能で分けれ >例えばシートに書き出す共通部を親クラスにして、 >それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。 「書く内容を決める」機能が「シートに書く」機能を継承するなんてナンセンス どのシートに書くかなんて「シートに書く」機能に引数で渡せばいいだけ
782 名前:デフォルトの名無しさん mailto:sage [2018/09/26(水) 20:55:21.65 ID:oECBSnBC0.net] >>763 あってるよ 50行でも粗大ゴミは作れちゃうんだよ
783 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 00:26:48.70 ID:zZL/tnLy0.net] さすがに一万行でまとまってるクラスってのはないわ。。
784 名前:デフォルトの名無しさん [2018/09/27(木) 00:28:50.85 ID:pq96CSzd0.net] もしかして知恵遅れは なんか書くために毎度毎度ofstreamを継承すんの もしかして知恵遅れは なんか読むために毎度毎度ifstreamを継承すんの さすが
785 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 00:36:33.47 ID:3iNJ0doV0.net] 例えば、基本クラスに出力クラスを作って、 派生クラスに、プリンター・PDF など、機能が異なるならオブジェクト指向だけど、 機能が同じなら、派生クラスではない。 単に、属性・メンバ変数が変わるだけ
786 名前:デフォルトの名無しさん [2018/09/27(木) 00:50:27.91 ID:pq96CSzd0.net] void aho::write(ostream& aho) const { aho << "aho" << endl; aho << "baka" << endl; aho << "manuke" << endl; } こんな感じで作っとけば いろんなもんに書ける可能性がある 抽象化をうまく利用するというのは こういうことだからな
787 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 05:39:28.23 ID:DR3ASZ+QH.net] 江添亮に匿名で質問ができて、高確率で答えが帰ってくる空間ってもうないのでしょうか
788 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 07:33:12.06 ID:zZL/tnLy0.net] 本人のtwitterにでも投げれば? 高確率で「質問ではない」が帰ってくるが。
789 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 07:58:37.31 ID:GSDkLsyd0.net] >>751 シェルスクリプトだけではシェルスクリプトを解釈実行することはできない C++からならできる つまりシェルスクリプトだけでは金輪際できない仕事というのは少なくとも1つある もっともこの宇宙自体がシェルスクリプト上で走っているシミュレーションなら話は別やが…
790 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 08:51:58.83 ID:Ct84HJ0d0.net] c++はコンパイラいるやろが
791 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 09:07:42.86 ID:eHS6051wM.net] そんな規約あったっけ? Cling とか CINT はパチモノ?
792 名前:デフォルトの名無しさん [2018/09/27(木) 13:29:28.75 ID:lX4OM9LG0.net] >>769 そういうのは、templateのほうがいい。ostreamに依存せずにすむ。
793 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 16:27:38.79 ID:Zeo03I1R0.net] 766からの流れでそうなっただけだろ
794 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 16:47:26.94 ID:Oj9x/TA+0.net] 俺には誰一人として標準のstreamクラスを継承する話はしてなかったように思えてならないんだが (最初の>>759 も書き出す処理を継承で共通部分と個別部分に分ける案を問うているだけ) なんでそういう話になってるんだっけ
795 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 20:48:20.83 ID:vb6QqVUs0.net] >>777 >>759 >全体で1000行ほどなんですけど、例えばシートに書き出す共通部を親クラスにして、 >それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。 書き出す共通部をまとめたクラスというのは ファイルで言えば ofstream みたいなものなのであろうと皆疑ってるんだろう。 「みたいなものではない」という、結論が違ってくるような違いも提示されないし。
796 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 20:54:25.22 ID:/ZxE29S10.net] 関数にすると不味いことある?
797 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 21:00:15.42 ID:Oj9x/TA+0.net] >>778 そうなのか……ありがとう 俺はostreamを引数に取る関数オブジェクトを多態やprotectedを使って実装するみたいなイメージで読んでた
798 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 21:09:44.86 ID:/ZxE29S10.net] 最初にクラスを設計し始めるのは筋が悪いと思ってる。そんな3流プログラマ。
799 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 23:22:58.17 ID:GSDkLsyd0.net] 訂正; △:シェルスクリプトだけではシェルスクリプトを解釈実行することはできない ○:シェルスクリプトがあるだけではシェルスクリプトの解釈実行を開始することはできない シェルスクリプトはもちろんシェルスクリプトから呼ばれるシステムコールその他の 一切合財をシェルスクリプト上だけでシミュレートする能力がある(と思う)が 全ての始まりを起こすのにC/C++で書かれたOSを要する >>781 つまりクラスの設計はおくらすのが正しい
800 名前:デフォルトの名無しさん mailto:sage [2018/09/27(木) 23:59:38.23 ID:RQl7S0Gm0.net] 来たよ、暇なので
801 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 09:32:22.81 ID:hWUH9Sli0.net] 最新のC++コンパイラが使えないので質問。 右辺値参照が仮引数になっている以下のような関数があった場合、 aaa(左辺値の変数); とすると、ちゃんと、aaa() は呼び出される? それともエラーになる? void aaa(T&& a) { ・・・ }
802 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 09:39:47.21 ID:UtPWkOJga.net] >>1 のオンラインコンパイラを使おう
803 名前:はちみつ餃子 mailto:sage [2018/09/28(金) 09:40:07.87 ID:7KXXqv1B0.net] >>784 呼び出される。 lvalue は rvalue にもなる。
804 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 09:48:18.84 ID:hWUH9Sli0.net] >>785 どこにあるの?
805 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 09:53:42.38 ID:hWUH9Sli0.net] では、aaa()に次のようなoverloadがある場合は、「2」の方が呼び出されて、 #if の部分を 0 にすると、「1」が呼び出される? だとすると、昔のC++では無かったような overloadの仕様かも? T b; aaa(b); // bは左辺値のつもり void aaa(T&& a) { puts("1, 右辺値参照、T&& に来たよ。"); } #if 1 void aaa(T& a) { puts("2, 左辺値参照、T& に来たよ。"); } #endif
806 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:13:48.61 ID:WRA8TBfa0.net] >>788 >>785
807 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:23:34.25 ID:RVKB6eOl0.net] >>784 呼び出されない 右辺値参照は左辺値を受け取らない(原則) ただしTがテンプレート仮引数の場合と、auto&&の場合は、 右辺値参照で左辺値を受け取れる(特例) 型を推定させた場合に限り、右辺値参照は、 左辺値参照への左辺値参照に変形できる
808 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:32:29.28 ID:hWUH9Sli0.net] [Compile and Execute C++11 Online (GNU GCC v7.1.1)] https://www.tutorialspoint.com/compile_cpp11_online.php で下の方のコードを試したら、 $g++ -std=c++11 -o main *.cpp main.cpp: In function ‘int main()’: main.cpp:18:10: error: cannot bind rvalue reference of type ‘TPerson&&’ to lvalue of type ‘TPerson’ aaa(b); // bは左辺値のつもり ^ main.cpp:8:6: note: initializing argument 1 of ‘void aaa(TPerson&&)’ void aaa(TPerson && a) ^~~ というエラーになった。gcc 7.1.1 では、>>786 の言ってくれたことと合ってない???
809 名前:デフォルトの名無しさん mailto:sage [2018/09/28(金) 10:33:03.33 ID:hWUH9Sli0.net] >>791 [続き] #include <stdio.h> struct TPerson { int m_age; }; void aaa(TPerson && a) { puts("1, 右辺値参照、T&& に来たよ。"); } int main() { printf("Hello, World!\n"); TPerson b; aaa(b); // bは左辺値のつもり return 0; }