C++相談室 part131 at TECH
[2ch|▼Menu]
[前50を表示]
700:デフォルトの名無しさん
17/09/10 07:35:26.76 8Jhjgi9Q0.net
折衷案色々あるなぁ、感心する。
>>676
別に個人のコードでどこかに迷惑かけてるわけじゃないし、この程度のコードも読めない方が問題。
それに高慢なお方は最初から相手にしてない。マウントしてほしくてやってるんじゃないんだよ。

701:デフォルトの名無しさん
17/09/10 07:49:26.32 8Jhjgi9Q0.net
URLリンク(ideone.com)
>>677を採用。これで解決しました。
明示の仕方がいまいちよくわかってなかった。
大変ありがとうございました。

702:デフォルトの名無しさん
17/09/10 10:50:41.00 Ch3ZHKVB0.net
プロパティー実装例か…
しかしまぁクソ面倒だ罠

703:はちみつ餃子
17/09/11 21:22:51.45 +dEH7rh50.net
auto で受けるとおかしげなことになるんちゃう?

704:デフォルトの名無しさん
17/09/12 01:44:38.63 uA5S/Coo0.net
馬鹿に触らせるなテンプレートって昔から言うしな。
フレームワークのテンプレートライブラリ提供する側だけが使っていいんだよ。

705:デフォルトの名無しさん
17/09/12 08:52:24.85 n2tkiU0+0.net
テンプレートはSTLやboostのまねをしていれば下手なことにはならないはずだが

706:デフォルトの名無しさん
17/09/12 08:56:45.99 aShF6cdKa.net
真似するだけでも、それなりのスキルが必要だ

707:デフォルトの名無しさん
17/09/12 09:35:13.31 M9yu8us30.net
何故そういうコードになっているかを理解せずに猿真似して意味があるかどうかはわからんけど
autoで受けるとおかしなことになるのは、キャストや代入で望む結果を得る方法(expression templateなど)全部そう
暗黙のキャストでなく関数呼び出しを強制すればautoでも大丈夫だけど

708:デフォルトの名無しさん
17/09/12 10:11:33.04 CGKPtYms0.net
> 馬鹿に触らせるなテンプレートって昔から言うしな。
自分が触りたくないのはわかったから

709:デフォルトの名無しさん
17/09/12 19:29:46.28 mgCIj6GX0.net
>>682
コピコン切ってあるから大丈夫だと思う。あとは推論性能。

710:デフォルトの名無しさん
17/09/12 19:43:33.31 8IhLGzTX0.net
コピコン

711:デフォルトの名無しさん
17/09/12 20:29:35.11 mgCIj6GX0.net
コピーコンストラクタ!

712:はちみつ餃子
17/09/12 22:54:11.94 cQiNwo4o0.net
>>688
あ、なるほど、状況を勘違いしてた。
C++17 からは RVO が使える場合は常に RVO で処理する (従来は「してもよい」というオプショナルな動作) ことと、
そのときはコピー (ムーブ) コンストラクタが無くても良いというルールが念頭にあったのだけれど、
この場合は RVO は関係なかった。 スマソ

713:デフォルトの名無しさん
17/09/12 23:35:09.46 q3PtGkEdr.net
>C++17 からは RVO が使える場合は常に RVO で処理する
ほうほう、それは本当ですか

714:はちみつ餃子
17/09/14 16:51:14.81 HER/jB+d0.net
そうです。

715:デフォルトの名無しさん
17/09/14 17:39:29.28 7On5vAcFr.net
>>693
だとすると
URLリンク(wandbox.org)
この二つのアドレスは同じになるはずでは?

716:デフォルトの名無しさん
17/09/14 22:59:53.42 AfykdPhZ0.net
いい流れだ

717:デフォルトの名無しさん
17/09/15 15:29:03.53 zUPCfesd0.net
"clacla.h"
class Clacla {
void func1();
void func2();
void func3();
};
"clacla.cpp" //実装部
クラスClacla くくり { <-ここ
void func1() { printf( "1" ); }
void func2() { printf( "2" ); }
void func3() { printf( "3" ); }
};
のように関数の実装時にClacla::を省


718:ェする方法ってあるでしょうか?



719:はちみつ餃子
17/09/15 15:33:45.29 leF15WXE0.net
>>694
最適化が有効なら C++17 であろうがなかろうが clang なら RVO が効くはずだけど、 u.p の値は null になっちゃうな。
RVO がどうこうじゃなくて this の挙動に関するなんか変なルールが適用されてるとかかも?

720:片山博文MZ
17/09/15 16:07:51.71 RQr5TBB1d.net
>>696
クラス内部にインライン関数を埋め込む方法しかない。

721:696
17/09/15 16:35:44.21 zUPCfesd0.net
>698
やっぱり無いですよね。
ありがとう。

722:デフォルトの名無しさん
17/09/15 21:02:35.06 86K7wrSvr.net
>>697
いやだからISO/IEC DIS 14882:2017 15.2/p3の規定により常にRVOが働くわけではないのではないかと申しているのですよ
ついでにu.pがnullptrになることはない

723:デフォルトの名無しさん
17/09/15 21:24:40.19 xDlOGQNS0.net
実にC++相談室らしい流れ

724:デフォルトの名無しさん
17/09/15 21:27:27.94 5X/IRSU20.net
右辺値参照の暗黙適用は例外の処理で不都合があるよね
元の値をTmpにコピっといて例外発生で書き戻すにしても
関数A処理内で呼び出した関数Bからの例外をAのユーザコードでは完スルーなのに
コンパイラコードではコッソリ捕まえて書き戻す必要が有る
そんときロックでも掛かってたらどーすんのよと
呼び出し繋がりを横断的に管理要するとんでもないコスト増なんじゃね?

725:デフォルトの名無しさん
17/09/15 21:36:23.16 xDlOGQNS0.net
Tmpのアドレスを関数B(およびその先の関数)が知る可能性がコンパイラから見て排除できない限り
関数Aから関数Bを呼び出す前にTmpは元の値の完コピーにならざるおえないのでは…
(そうでなければ副作用のある関数を安全にコンパイルできない&安心して書けない
さらにロックに入るときと出るときは上と同じ理由で結果的に完コピーになる上に、
まともなOSならメモリバリアまで手当てしてくれるんじゃ…

726:デフォルトの名無しさん
17/09/15 21:42:30.18 xDlOGQNS0.net
つまり右辺値参照の暗黙適用が効力を持つのはスゲー広範にインライン展開されるような場合
(当然いかなるOSのAPIやシステムコール類の呼び出しも含まない
「だけ」
であって、通常のプログラマーにはあんまありがたみがはっきりしない仕様
※ 個人の感想です

727:デフォルトの名無しさん
17/09/15 22:02:45.85 1aOT1P+6d.net
コンパイラに頼らないで、素直にパラメーターの参照にしよう

728:はちみつ餃子
17/09/15 22:04:08.03 leF15WXE0.net
>>700
意図するところをあらためて説明すると、
最適化オプションを有効にする (RVO が効くはず) と実際に null になるんだから
clang があてにならないのじゃない? という話。

729:デフォルトの名無しさん
17/09/15 22:08:16.65 5X/IRSU20.net
いや noexcept 付きを呼ぶ場合も有難味あると思うよ
C++は const祭りに noexcept祭り追加でござる
特殊化も爆発

730:デフォルトの名無しさん
17/09/15 22:34:11.14 1joZngjnr.net
>>706
なるほど理解した
C++11の頃に輝いたclangはその後、規格的にはG++にも劣るゴミなのでそのへんは致し方ない

731:デフォルトの名無しさん
17/09/16 11:22:55.52 u7cVvkyR0.net
forward祭り

732:デフォルトの名無しさん
17/09/18 10:24:11.11 lVEmBRA9d.net
tcp/ipの勉強のためにC++で何か作れば勉強になるかな?って思ってるのだけど
こういうものを作れば勉強になるよってものある??
パケットの動きだったり階層の考え方だったりを学びたい

733:デフォルトの名無しさん
17/09/18 10:40:29.87 U79GLBVsM.net
>>710
TCP/IPの勉強ならWireSharkの使い方覚えた方が早いかも
その上のプロトコルレベルなら勉強したいプロトコルの簡単なクライアントから始めればいいと思う
ちなみに俺はNetNewsに流れるむふふ画像を取り込みたかったのでnntpのクライアントをperlで組んで勉強した

734:デフォルトの名無しさん
17/09/18 11:05:46.29 lVEmBRA9d.net
>>711
プロトコルレベルの勉強をしたい
そうなるとhttpサーバを立てることになるのかな?
そういう場合は簡単なhttpサーバとクライアントを作成すれば良いのかね?
それで通信しあってwiresharkで中身を見てtcpだったりhttpだったりを見るべき?

735:デフォルトの名無しさん
17/09/18 11:39:07.40 9mrqYCJU0.net
おれは一昔前、深夜ボリュームでかくする姉貴のPCが煩くてTCP通信でマスターボリューム弄るサーバー&クライアント作ってコッソリ仕込んでコントロールしてたな。
まぁ、やってやるぞというモチベーションは大事だとおもうよ。
ガンバってね。

736:デフォルトの名無しさん
17/09/18 11:41:39.15 qrTqFTlir.net
>>713
それ仕込んでるとき超ワクワクしそう

737:デフォルトの名無しさん
17/09/18 11:43:19.16 lVEmBRA9d.net
>>713
姉貴のパソコンにサーバプログラム常駐させる
そいつがポートXXXで待ち構える
同じ家なのでネットワーク帯は同じで
自分のpcからポートXXXにメッセージ送信する
姉貴のサーバプログラムが受け取ってボリューム下げる処理をする
こんなことしてたってことかね?

738:デフォルトの名無しさん
17/09/18 12:01:08.52 9mrqYCJU0.net
>>715
まぁ大体そんな感じなんだが、急に音量小さくすると即効でばれるので、まず、姉貴PCの音量を取得するのが第一だな。
そこからスライダーでボリューム下げていった値をサーバーに順次送信しサーバープログラムがその値に応じて音量を徐々にフェードコントロールするといった具合だな。

739:デフォルトの名無しさん
17/09/18 12:08:20.13 nt0hX0ohr.net
>>716>>715の三人きょうだいの次女である可能性が否定できない

740:デフォルトの名無しさん
17/09/18 12:10:35.92 lVEmBRA9d.net
>>716
いつも音量小さくなってたのはあんたのせいだったのね??

ってことはそれって通信はhttp?

741:デフォルトの名無しさん
17/09/18 12:15:30.74 9mrqYCJU0.net
>>718 http関係ない
ボリュームと改行の平文を繰り返し送るだけの超簡易仕様
だれでも作れる

742:デフォルトの名無しさん
17/09/18 12:57:21.32 lVEmBRA9d.net
>>719
相互にsend recvしてるだけってことかな

743:デフォルトの名無しさん
17/09/18 13:48:18.24 U79GLBVsM.net
>>712
サーバーよりクライアントの方が簡単だからサーバーは適当な奴持ってきて簡単なクライアントを作るところから始めればいいと思う

744:デフォルトの名無しさん
17/09/18 14:27:41.23 lVEmBRA9d.net
>>721
IISサーバとかってことかな?
あの辺の使い方も基本は同じよね?
ポート指定して使うみたいな

745:デフォルトの名無しさん
17/09/18 15:08:42.19 eqWC6Q8G0.net
>>722
> IISサーバとかってことかな?
環境ならWindows IISが簡単だろうね
ネットでググれば情報たくさんあるし

746:デフォルトの名無しさん
17/09/18 17:35:56.07 UWkHQHZA0.net
そもそも、TCP/IPの練習にC++は妥当なのか?

747:デフォルトの名無しさん
17/09/18 17:55:46.62 lVEmBRA9d.net
>>724
CとC++しか言語知らんのや...
IISサーバーと通信できない
これのポートとかどう設定するんや...

748:デフォルトの名無しさん
17/09/18 18:29:11.61 Of28e9o20.net
ネットワークライブラリは現在策定中だっけ。

749:デフォルトの名無しさん
17/09/18 18:34:59.92 HogVByKA0.net
>>725
以前ネットワークプログラム勉強するのにこのサイト利用させてもらった
わかりやすいと思う
URLリンク(x68000.q-e-d.net)

750:デフォルトの名無しさん
17/09/18 20:33:20.53 lVEmBRA9d.net
>>727
今読み始めたけど丁寧でわかりやすい

751:デフォルトの名無しさん
17/09/19 10:23:20.37 mIuFgC1Fd.net
初歩の初歩の初歩の質問なんだけど
あるPCにポートXXを口とするサーバソフトを同時に二つ立てることはできないよね?
1つめはXXを使うとしてその後にたてられた2つめはどうなる?
(スレチっぽくなってますがよろしくです...)

752:デフォルトの名無しさん
17/09/19 10:38:02.75 S6233VLa0.net
出来ます
サーバー側はリクエストに応じて複数のプロセスを起動し、
同じポート番号を使って複数のプロセスが受け答えします
各プロセスはそれぞれで生成したソケットを使ってクライアントとやり取りします

753:デフォルトの名無しさん
17/09/19 10:57:49.02 mIuFgC1Fd.net
>>730
それってプログラム内でforkして子プロセスを作る場合の話です?
サーバソフトAとサーバソフトBの両立ができたとすると
ポートXX使用します!ってのはどこでどちらを使うと判断するのでしょうか...

754:デフォルトの名無しさん
17/09/19 13:04:43.06 TdcUa1CK0.net
特定ポートでlistenするプロセスは一つだけです。
複数のプロセスで共用は出来ません。

755:デフォルトの名無しさん
17/09/19 17:39:27.17 5tfXl8chM.net
>>729
LANポートが複数あればできるし、LANポートがひとつしかなくてもIPアドレスを複数割り当てられるなら可能

756:デフォルトの名無しさん
17/09/19 18:44:47.92 PcYxkZC90.net
>>733
ああ言えばこういうの典型
どうでもいいけどC++と関係ないクソ話もうヤメロよカスども

757:デフォルトの名無しさん
17/09/19 18:49:41.83 Poc3cQP+M.net
しかも間違ってるという

758:デフォルトの名無しさん
17/09/19 18:57:54.46 5tfXl8chM.net
>>735
ん?
どこか違ってたっけ?

759:デフォルトの名無しさん
17/09/19 19:48:42.76 SHe+skknr.net
>>736
二つ前のレスくらい読んでほしいものだ

760:デフォルトの名無しさん
17/09/19 20:12:29.29 4ZFv917O0.net
C++98ではできない
C++11以後できるようになった
だろ、通信は本質的にマルチタスクだ

761:デフォルトの名無しさん
17/09/20 00:14:27.26 zNeStlMI0.net
なにをいってるかよくわからんがすごい自信だ。

762:デフォルトの名無しさん
17/09/20 01:48:22.84 E2xZjesx0.net
規格外のライブラリならほぼ何でもありといえばありだけどさ。
ライブラリ自信はまだ策定中でしょ。

763:デフォルトの名無しさん
17/09/20 03:12:29.17 E3lPvo/Y0.net
bind()する時のローカルのIPアドレスを別々にすれば同一ポートで別々のサーバプログラムって動かないの?

764:デフォルトの名無しさん
17/09/20 04:49:07.58 uOAr6bd90.net
>>741
だから動くってば
ユニークである必要があるのはIPアドレス:ポート番号の組み合わせだから
>>730
>各プロセスはそれぞれで生成したソケットを使って
まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?
いずれにせよこんなのはネットワーク初心者の話題であってC++とは何も関係ない

765:デフォルトの名無しさん
17/09/20 06:46:32.53 k3KNfXHnM.net
>>737
それが間違ってるって話
>>741が言うようにローカルアドレスを指定すれば同じPCで同じポートを使用するサーバーを複数立てられる

766:742
17/09/20 10:56:07.53 uOAr6bd90.net
自己訂正
>まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな?
あはは、これは俺の勘違いだったわ
acceptで返されるソケットはlistenポートと同じポート番号を持っている

767:デフォルトの名無しさん
17/09/21 05:09:49.50 t8iqXrAz0.net
質問です。
{ 10/*%*/ } = { a,b,c };
というのは、
a = 10%
b = 10%
c = 10%
なのでしょうか?それとも、
a+b+c = 10%
なのでしょうか?

768:デフォルトの名無しさん
17/09/21 05:48:27.92 eSaSp7RC0.net
C++を習得するのに莫大な時間を費やしました。
C++のプロフェッショナルなプログラマーになりたかった。
なのに、ハード系の知識が無いと言う理由で、もらう仕事はVB.NET、C#.NET系ばかりでした。

769:デフォルトの名無しさん
17/09/21 05:51:26.56 eSaSp7RC0.net
質問を書くのを忘れやんした。
C++の仕事ってハード系、通信系、制御系以外、通常業務のシステム開発はないんでしょうか?

770:デフォルトの名無しさん
17/09/21 06:00:29.19 Bo0/1phe0.net
ポート重複で同じアドレスでBananaサーバーみたいなラックマウントサーバーの仕組みってあれは一つのサーバーがlistenで待って接続してきたクライアントの処理を複数の子サーバーに割り振っているだけなのか?

771:デフォルトの名無しさん
17/09/21 08:18:42.29 E1HbcZFyr.net
struct unko { unko()=delete; };
int main() { unko u{}; }
何故コンパイルが通るのかを理解するのに半日かかった
やはりこの言語はクソ

772:デフォルトの名無しさん
17/09/21 08:46:59.52 iktVOuYO0.net
>>746
他人から降って湧いてくることしか期待してないからそうなる
自分がやりたいことは自分で始めろ

773:デフォルトの名無しさん
17/09/21 10:13:00.29 JjsSVLys0.net
>>747
C++はC#とかでできないことがあるときに仕方なく使うイメージがある

774:デフォルトの名無しさん
17/09/21 11:36:34.81 p6kNBh4ir.net
>>749
あれ
何で動くんだ?
plain old dataあたりの話が噛んでる?

775:デフォルトの名無しさん
17/09/21 12:35:00.95 iktVOuYO0.net
C#の方が楽なところが特に無いのでC#という選択肢が無い

776:デフォルトの名無しさん
17/09/21 13:21:38.51 TbHBi0+x0.net
>>752
PODがかかわってる部分はあるけど基本として理解しておくべきことは
=default,=delete指定はコンストラクタの宣言でも定義でもない
ということ
つまり>>749の文脈では
struct unko { unko()=delete; };
int main() { unko u{}; }

struct unko {};
int main() { unko u{}; }
と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない
(unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる)

777:
17/09/21 16:15:38.61 na02B6ss0.net
>>750
お、おう!

778:デフォルトの名無しさん
17/09/21 17:36:23.55 E1HbcZFyr.net
>>752
規格によると unko u{}; は
8.5/p17『If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized』によりリスト初期化される
リスト初期化は8.5.4/p3『If T is an aggregate, aggregate initialization is performed』
に該当するのでコンストラクターが呼ばれずにaggregate初期化される。
なおaggregateの定義は8.5.1/p1により『array or a class (Clause 9) with no user-provided constructors (12.1), no (略)』
ここで8.4.1/p1により「=delete」は関数本体だが、
8.4.2/p5によりuser providedではないと見なされている(たぶん)

779:デフォルトの名無しさん
17/09/21 22:11:37.04 VzX3yrPwM.net
>>748
パケットレベルで振り分けたり、プロキシとして動作したり色々
ロードバランサ 仕組み
とかでググるがよろし
あとそこまで行くと完全にスレチなので
ネットワーク
URLリンク(mevius.2ch.net)
とかに行っとくれ

780:デフォルトの名無しさん
17/09/21 23:20:34.43 Bo0/1phe0.net
ほほう

781:デフォルトの名無しさん
17/09/23 11:36:40.13 2CJ5RW/30.net
>>747
20年前は普通にあった、ていうかそれしか方法がなかったが
今はもっと楽な方法があるのでほぼ無くなった
僅かな例外はパフォーマンスを求めるようなプログラムを作る場合だが
それでもライブラリなどの表から見えない部分の作成に限られる

782:デフォルトの名無しさん
17/09/23 21:53:53.16 DdQqqOWmH.net
各添字が 1 から X まで動く多次元配列を一次元で
A[i + X*j + X*X*k]
のように表しているのですが、この多次元配列の各添字を入れ替える操作を頻繁に行うので、関数にしたいです。
どのようにするのが良いでしょうか。
たとえば
f(A, B, 2, 3, 1);
のように引数をとって B という配列に
B[j + X*k + X*X*i] = A[i + X*j + X*X*k]
と要素を入れたいです。
「2, 3, 1」を関数の中で解釈する方法も分からなくて困っています。

783:デフォルトの名無しさん
17/09/23 22:14:21.88 dWsmcDp10.net
>>760
その例だと A[X][X][X] の3次元相当だけど3次元限定でいいの?

784:デフォルトの名無しさん
17/09/23 22:34:01.05 qTNnvPi+0.net
URLリンク(ideone.com)
こんなんでええやろ

785:デフォルトの名無しさん
17/09/23 22:36:10.87 dWsmcDp10.net
>>760
こういう解釈でいいかな?
template <typename T, std::size_t X>
void fillA2B(T (&A)[X*X*X], T (&B)[X*X*X], int ax1, int ax2, int ax3)
{
int i, j, k;
int& ii = (ax1==1)? i: ( (ax1==2)? j: k );
int& jj = (ax2==1)? i: ( (ax2==2)? j: k );
int& kk = (ax3==1)? i: ( (ax3==2)? j: k );
for ( i = 0 ; i < X ; ++i )
for ( j = 0 ; j < X ; ++j )
for ( k = 0 ; k < X ; ++k )
B[ii + X * jj + X * X * kk] = A[i + X * j + X * X * k];
}
int main()
{
const int N = 2;
int A[N*N*N], B[N*N*N];
int n{0};
for ( int a = 0 ; a < N*N*N; ++a )
A[a] = n++;
fillA2B<int, N>(A, B, 1, 2, 3);
fillA2B<int, N>(A, B, 2, 3, 1);
fillA2B<int, N>(A, B, 3, 1, 2);
return 0;
}

786:デフォルトの名無しさん
17/09/23 22:38:24.75 cFmXNXGU0.net
左辺が j, k ,i 右辺が i, j, k のようだが

787:デフォルトの名無しさん
17/09/23 22:45:31.08 dWsmcDp10.net
あ、一気に全要素にFillしなくてもいいのかな?

788:デフォルトの名無しさん
17/09/24 00:03:03.61 7FyCscw80.net
……素直に3次元の配列にすりゃあいいんじゃねえのかなコレ
どーーーしても1次元にしなきゃいけない重大な理由が背後に控えてんのかな?

789:デフォルトの名無しさん
17/09/24 00:08:42.25 xnpjieyid.net
普通にメモリ確保したら1次元だからな

790:デフォルトの名無しさん
17/09/24 00:21:25.13 J5lzydll0.net
B[ii][jj][kk] = A[i][j][k];
でも通るな

791:デフォルトの名無しさん
17/09/24 00:25:12.68 QX+6yKIgH.net
>>761
もちろん任意の次元を一度に扱えたら最高です。
ゆくゆくは各添字の次元を変えることも考えています。
>>762>>765
すみません。
全要素を並び替えたいです。
>>766
カラムメジャー、ロウメジャーを任意にしたいという背景があります。
また、各添字の次元が本当は任意であるということもあります。
>>763
ありがとうございます。
確かにこれで>>760はできそうです。
パーミュテーションの実装の仕方が分かりました。
原理的にはこれで任意の添字の数、次元に対応できる (それぞれ関数を作る必要はある) と思うのですが、もっとアカデミックな方法ともあるのでしょうか?

792:デフォルトの名無しさん
17/09/24 02:35:34.07 0uAENq5F0.net
>>769
アカデミックは知らんが一般化するなら
B[ i*bi[0] + j*bi[1] + k*bi[2] + ... ]
と各次元ごとの係数を変数にして設定だな
>>760のたとえばでは bi[0] = X*X, bi[1] = 1, bi[2] = X
あとはインターフェイスにあわせてヘルパ処理を用意すればいい
f(... int x, int y, int z)
int bi[3];
bi[x - 1] = 1;
bi[y - 1] = X;
bi[z - 1] = X*X;

793:デフォルトの名無しさん
17/09/24 17:29:12.46 vw1eQBGxr.net
>>770
ありがとうございます。
あとは任意個数の引数を取れるようにすれば添字がいくつあっても、各添字がどのように走っても一つの関数で対応できますね。
勉強になりました。

794:デフォルトの名無しさん
17/09/25 00:05:50.55 KE0eJu6Z0.net
C++とほとんど関係ないな

795:デフォルトの名無しさん
17/09/25 10:20:39.11 c/fcx1bx0.net
任意個数の引数って、まさか省略記号と可変個数実引数では・・・
と思ったらモロじゃねえか おいおい
このスレ的にはinitializer_listやtemplate parameter packだろ

796:デフォルトの名無しさん
17/09/25 11:38:31.09 VZWzPiEFd.net
>>773
template parameter pack って variadic template と同じもの?
後者の呼び方には馴染んでるんだけど。

797:デフォルトの名無しさん
17/09/25 12:51:53.80 ML1gBCAMM.net
>>774
同じ

798:デフォルトの名無しさん
17/09/25 16:12:14.99 b+XdOI/H0.net
>>773
ほっといたっていずれ覚えるだろうに何故押し付けるのか

799:デフォルトの名無しさん
17/09/25 17:17:22.88 RnBeI/QIM.net
>>776
より良い代替案があるんだったらそっちに誘導すべきだろう。
実際使うべきじゃないし。

800:デフォルトの名無しさん
17/09/25 18:34:40.87 iFpSSPyJr.net
>>774
違う

801:デフォルトの名無しさん
17/09/26 10:35:57.85 DAuKDJeY0.net
>>776
このスレ的にはって書いてあるのが読めてないのか
自分が苦手なものに触れられたくないのか
どっちだ?

802:デフォルトの名無しさん
17/09/26 11:02:34.83 XbrOuhiT0.net
>>779
最近お前みたいなニワカが増えてうんざりするわ
というかCの可変長引数がどこに出てきた?

803:デフォルトの名無しさん
17/09/26 11:38:28.30 XSwUFkBD0.net
つかぬことを伺いますが、
あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、
外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません
どうすればよいのでしょうか
〜ヘッダ内
class Hage{
public:
struct A{
int a;
int b;
};
static const struct A M;
}
〜ソース内
#include "ヘッダ"
const struct A Hage::M; //不正

804:デフォルトの名無しさん
17/09/26 11:39:54.54 XSwUFkBD0.net
あ、行頭の半角スペース消されるの忘れてた

805:デフォルトの名無しさん
17/09/26 11:48:05.08 XbrOuhiT0.net
const struct Hage::A Hage::M;

806:デフォルトの名無しさん
17/09/26 11:48:55.33 r3ztyMSNd.net
>>781
少なくとも Hoge::A としなけりゃダメなんじゃないか
>>771を読んでもCの可変長引数とは決めつけられなかった

807:デフォルトの名無しさん
17/09/26 11:51:53.92 XSwUFkBD0.net
うわあ何でこんな初歩的なことに躓いていたんだアホらしい
>>783-784サンクス

808:デフォルトの名無しさん
17/09/26 15:18:58.40 SDiSqFpw0.net
###HUM###
000-K,AZ,0,1,
001-KI,L,I.T,DEF,11.2,TE,F,0.12235,
002-EM,OBLA,7##END

809:デフォルトの名無しさん
17/09/26 15:24:00.47 DAuKDJeY0.net
>>780
うわーおまえ、それ人に聞かなきゃ判んねえの?
省略記号は右端という初歩の初歩でミスりながら
ドヤってる笑い地獄が2日前あったんだが
突っ込めなきゃせっかくボケた芸人も泣いてるだろうな

810:デフォルトの名無しさん
17/09/26 16:32:49.03 XbrOuhiT0.net
>>787
まずはsageることから覚えような

811:デフォルトの名無しさん
17/09/26 16:36:37.77 r3ztyMSNd.net
>>773の「モロじゃねえか」がどっから出てきてるのか謎だ

812:デフォルトの名無しさん
17/09/26 17:08:16.18 XbrOuhiT0.net
多分Cの可変長引数なら右端以外にも書けると思ってんじゃないかな

813:デフォルトの名無しさん
17/09/26 18:55:18.16 DXd+nok20.net
こんなイメージかな?
#define X (100)
#define f(a,b,c,d,e) ((b)[(c)+X*(d)+X*X*(e)] = (a)[(e)+X*(c)+X*X*(d)])

814:デフォルトの名無しさん
17/09/26 19:31:39.64 T9NefDHyr.net
>const struct A Hage::M; //不正
初歩的でなく相当に高度な気がしてならない
規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない
「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので

815:デフォルトの名無しさん
17/09/26 22:59:17.35 pvKSJMRt0.net
そうでもない

816:デフォルトの名無しさん
17/09/26 23:10:02.38 28pSalnA0.net
だってグローバルスコープにも struct A; が存在したらどうなるか?
って考えればすぐわかりそうなモノじゃんね

817:デフォルトの名無しさん
17/09/26 23:33:07.57 QYZ1C1Pk0.net
グローバルが優先される所と、グローバルよりクラスや名前空間が優先される所が入り乱れたこの言語で
どちらが優先なのかを正確に覚えてるのはかなりの変人である可能性が高い
URLリンク(ideone.com)

818:デフォルトの名無しさん
17/09/26 23:48:01.42 piJXswiP0.net
グローバルが優先するところなんてあったか?

819:デフォルトの名無しさん
17/09/26 23:48:58.27 28pSalnA0.net
>>795
その例ではいったんA::の中に入っているから B はA::B になるけど
>>781 のはそうじゃないからな。

820:デフォルトの名無しさん
17/09/27 00:14:02.46 LyDwKMB00.net
>>788
おーいバカ、省略記号の位置の件はわかったか?
まさか789なみの重度池沼じゃねえよな

821:デフォルトの名無しさん
17/09/27 00:41:37.58 lz0JexH90.net
>>771>>770を参考にして新たに考えようとしてるじゃないか。
それを>>770のやり方でまんま行こうとしている、と解釈するのは悪意があるぞ。

822:デフォルトの名無しさん
17/09/27 00:57:18.03 LyDwKMB00.net
だからって770の大ボケを正当化する法はあんめえ

823:デフォルトの名無しさん
17/09/27 07:53:47.82 Ep3hxvTm0.net
あんめえ

824:デフォルトの名無しさん
17/09/27 09:12:11.59 nsBNhogE0.net
>>800
お前まだ分からんのか・・・
>>770のどこが大ボケなんだよ
添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり
パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり
なんてのはCでもC++でも出来ないの
お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら
>>770を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ
質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ
憂さ晴らしにしか利用しないのなら出ていけ

825:デフォルトの名無しさん
17/09/27 09:30:35.39 LyDwKMB00.net
文面上の省略だっておw
大ボケに苦しい言い訳を上塗りして
アフォから超アフォに進化したなあ

826:デフォルトの名無しさん
17/09/27 09:41:27.37 nsBNhogE0.net
>>770じゃないよw

827:デフォルトの名無しさん
17/09/27 10:03:04.41 LyDwKMB00.net
どう見ても770だな
必死さの理由が他にない

828:デフォルトの名無しさん
17/09/27 10:19:41.03 Ls/Jbx6+0.net
ワッチョイも知らないアホじゃん

829:デフォルトの名無しさん
17/09/27 11:12:43.27 LyDwKMB00.net
驚いた、ム板にIP信者がいるとはね
嘆かわしい限りだ

830:デフォルトの名無しさん
17/09/27 11:41:32.93 /eBNIii1d.net
>>800
だったら>>771をターゲットにすればよかったんだよ
お前は>>770をも貶し続けていると見なされていたんだよ

831:デフォルトの名無しさん
17/09/27 11:42:15.16 /eBNIii1d.net
>>808 間違えた、逆だ



833:デフォルトの名無しさん
17/09/27 14:47:33.57 LyDwKMB00.net
大ボケ+言い訳+IP信者+錯乱
この安定したアフォぶりは、どう見ても同一人物だなw

834:デフォルトの名無しさん
17/09/29 01:30:30.30 ppl3WHHK0.net
%%%3%%%
000-DOK<NAZE-0.8112162>
001-3800%\73NMB/1,81,2,NB"IKKI"%
002-91.81%ML7"8.122231746668193,43@ML.4@"%^23.1444
003-1.33321444718%"YLD""SO"%{71.%{62.1339816{331.422231765%<<<NL6
004-LOOP%Go To"000"%
VCL

835:デフォルトの名無しさん
17/09/29 22:15:16.68 7WUGaaf40.net
javaやc#しかやったことないような人間がc++でもメモリ管理をきちんと身につけるには何から始めるのが手っ取り早いでしょう?

836:デフォルトの名無しさん
17/09/29 23:55:16.07 7WUGaaf40.net
そもそもみんなc++で何してるの?🤔

837:デフォルトの名無しさん
17/09/30 00:49:06.72 Yf3yOiqk0.net
人工知能ゥ・・・

838:はちみつ餃子
17/09/30 00:56:27.58 H54Xn+Px0.net
>>812
C++ ではなるべくスマートポインタを使って自動化すべきなんだけど、
その内側にあるメモリの気持ちを実感として持つには C の範囲で色々やってみるのもいいかな。

839:デフォルトの名無しさん
17/09/30 01:18:37.51 bL0j7tMv0.net
>>812-813
JavaやC#が選択肢になる状況でC++を選択する理由はない。
今C++を何に使うか決まってないのなら、JavaやC#を極める方向に努力した方がいい。

840:デフォルトの名無しさん
17/09/30 01:39:01.97 zjlhf9G/0.net
VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、
これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか?
グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?

841:デフォルトの名無しさん
17/09/30 09:54:39.91 1M7A4t/A0.net
まあたまには口ですることもあるかな…

842:デフォルトの名無しさん
17/09/30 16:24:19.18 EIEZdyCfd.net
問題が起こらないように作れば起こらない
としか言えない

843:デフォルトの名無しさん
17/10/01 00:09:52.37 A+1idbvt0.net
MFCのtheAppには100万回ぶち切れてきたけど動作上は特に問題は無い

844:デフォルトの名無しさん
17/10/01 04:08:21.65 EFR2vscz0.net
あーこの人、こうやっちゃったんだ(ニヤニヤ
しながら使うもの
ARM C++ベースなんで同情するところもあるけどね

845:デフォルトの名無しさん
17/10/01 11:18:29.65 coFT7XLp0.net
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる
ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む

846:デフォルトの名無しさん
17/10/01 12:31:41.44 A+1idbvt0.net
平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる
そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある
マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する
俺切れる

847:デフォルトの名無しさん
17/10/01 12:47:25.61 coFT7XLp0.net
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる
非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、

848:デフォルトの名無しさん
17/10/01 12:50:48.09 +enXMbbO0.net
>>823
アプリケーションの中で寿命の長いデータはどこにどうやって置いてるの?

849:デフォルトの名無しさん
17/10/01 14:12:37.21 A+1idbvt0.net
>>824
ちょっと足りなかったわ
マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある
そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する
>>825
必要なデータだけを引数で与えるべき

850:デフォルトの名無しさん
17/10/01 14:15:44.38 P+J8m3XL0.net
グローバル変数で同期とるんじゃないぞ。そんなもので同期なんて取れないからな。
ちゃんとOSが提供する同期オブジェクト使えよ。

851:デフォルトの名無しさん
17/10/01 14:17:42.21 LFbo+6zld.net
どんな環境でもOSがあってしっかりした同期の仕組みが有るとか思ってるお花畑がいると聞いて

852:デフォルトの名無しさん
17/10/01 14:25:15.04 P+J8m3XL0.net
いやはや無知で申し訳ない。
マルチスレッド機能があって同期の仕組みが提供されない処理系があるならばご教授して頂きたい。

853:デフォルトの名無しさん
17/10/01 14:59:48.84 8m985+fI0.net
文脈上Windowsでの話なのははっきりしてるのに「どんな環境でも」とか

854:デフォルトの名無しさん
17/10/01 15:20:08.45 +enXMbbO0.net
>>826
>必要なデータだけを引数で与えるべき
引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?

855:デフォルトの名無しさん
17/10/01 15:35:52.14 7TdPvZgo0.net
>>831
> 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
再帰的にたどって行けばいいだけかと
プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし

856:デフォルトの名無しさん
17/10/01 15:38:17.18 P+J8m3XL0.net
どうしてもグローバル的なものがほしいなら、グローバルにしてしまえよ。
アクセス用の関数だけしっかり同期処理書けばいい。

857:デフォルトの名無しさん
17/10/01 15:41:47.38 coFT7XLp0.net
んまーマルチスレッド機能有りのOSであり
 (1) OSがプリエンプトしてくるのを止めるAPIが無い
 (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる

858:デフォルトの名無しさん
17/10/01 15:43:55.69 coFT7XLp0.net
いやすまん下記も追加
 (3) interlock系の命令が使えない(特権命令違反か何かでトラップされる
(3)は使えるかな普通…
>>829のは杞憂かもしれんな…

859:デフォルトの名無しさん
17/10/01 15:51:28.11 coFT7XLp0.net
しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、

860:デフォルトの名無しさん
17/10/01 15:52:05.08 7TdPvZgo0.net
>>834-835
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?

861:デフォルトの名無しさん
17/10/01 15:59:29.84 coFT7XLp0.net
>>837
Interlock系命令の意味で言った
正しい言葉使いかは知らん…!

862:デフォルトの名無しさん
17/10/01 16:05:24.82 a+6SxdIf0.net
atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。

863:デフォルトの名無しさん
17/10/01 17:15:48.85 zBOS+jx9M.net
ミューテックスが何だって?
くだらねえ話しやがって・・

864:デフォルトの名無しさん
17/10/01 17:18:14.77 A+1idbvt0.net
>>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない

865:デフォルトの名無しさん
17/10/01 17:46:49.19 +enXMbbO0.net
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。

866:デフォルトの名無しさん
17/10/01 18:21:24.53 A+1idbvt0.net
>>842
言ってる意味がわからない
クラスA内クラスBとCを宣言して
B b;
C c;
c.set_data(b);
だとか
main関数内で
Dptr d_ptr = D::get_resource();
Eptr e_ptr = E::get_resource();
F f(d_ptr, e_ptr);
f.excute();
とかこんな風にする

867:デフォルトの名無しさん
17/10/01 18:30:22.24 +enXMbbO0.net
>>843
んー
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
「あるいは」ってどういう意味?
main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。

868:817
17/10/01 18:34:27.58 SWvA/SVx0.net
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。
こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?

869:デフォルトの名無しさん
17/10/01 19:04:09.96 c8q3kohq0.net
>>845
起こらないように設計する。

870:デフォルトの名無しさん
17/10/01 19:06:45.42 A+1idbvt0.net
>>844
普通なパブリックなメンバでいいと思うけど
その所有権をもったクラスの寿命が尽きたら同時に開放される

>>845
もちろん参照元からは参照先の実態があることが保障されないのでよくある
特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した

871:デフォルトの名無しさん
17/10/01 19:24:06.85 8m985+fI0.net
「クラスの寿命」とかもう難しすぎてついていけんわ

872:デフォルトの名無しさん
17/10/01 19:38:58.01 A+1idbvt0.net
>>848
推敲とかしてないのである程度読み替えて言いたいことを汲み取ってね
そのクラスの変数の寿命な

873:デフォルトの名無しさん
17/10/01 19:42:13.70 +enXMbbO0.net
うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね

874:デフォルトの名無しさん
17/10/01 19:51:59.11 P+J8m3XL0.net
悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。

875:デフォルトの名無しさん
17/10/01 19:54:30.69 +enXMbbO0.net
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。
普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く
一長一短あるのでそれ以外に何かないかなという話

876:デフォルトの名無しさん
17/10/01 20:03:44.13 P+J8m3XL0.net
別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。

877:デフォルトの名無しさん
17/10/01 20:06:34.68 +enXMbbO0.net
>>853
あなたの意見は>>833以降ずっと一貫しているからいいですよ。
>>823の意見がわかるようでわかりにくい

878:デフォルトの名無しさん
17/10/01 20:15:10.00 P+J8m3XL0.net
MFC? H社のソフトのことかな?

879:デフォルトの名無しさん
17/10/01 22:22:01.91 SWvA/SVx0.net
>>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)

880:デフォルトの名無しさん
17/10/01 22:50:35.76 LFbo+6zld.net
>>829
無知を謝る必要はない
マルチコアのDSPをOSレスで使うとか

881:デフォルトの名無しさん
17/10/01 22:54:38.73 LFbo+6zld.net
>>826
パラメータで渡すべき情報と
そうじゃない情報と
がある

882:デフォルトの名無しさん
17/10/01 23:00:12.89 LFbo+6zld.net
>>852
スタティックメモリ(グローバル変数など)
auto変数(スタックやレジスタなど)
OSやAPI側の保存領域(APIを用いた設定など)
ファイルなど

883:デフォルトの名無しさん
17/10/01 23:08:17.57 A+1idbvt0.net
>>856
起こるわけないが

884:デフォルトの名無しさん
17/10/01 23:28:49.53 LFbo+6zld.net
意図的じゃないdelete

885:デフォルトの名無しさん
17/10/02 15:27:40.28 jSh1mr/v0.net
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった
本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー

886:デフォルトの名無しさん
17/10/02 17:30:53.86 wJY11lw/0.net
最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。

887:デフォルトの名無しさん
17/10/02 17:45:41.63 M0wavUvt0.net
DXLibがSTG制作に特化したライブラリ…

888:デフォルトの名無しさん
17/10/02 18:07:53.55 wJY11lw/0.net
>>864
何かおかしなことを言っていたらすみません。
STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。

889:デフォルトの名無しさん
17/10/02 19:07:36.56 SPyFybU20.net
それはDirectXの薄いラッパなので何に特化しているとかはない
マルチプラットフォームで作りたいならOpenGLで作れ

890:デフォルトの名無しさん
17/10/02 20:27:58.95 wJY11lw/0.net
OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?

891:デフォルトの名無しさん
17/10/02 20:36:13.43 /AEbHlJU0.net
Valkan行こう

892:デフォルトの名無しさん
17/10/02 22:38:15.66 O4roxos+0.net
>>845
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい

893:デフォルトの名無しさん
17/10/03 00:06:57.08 AOU4wQiN0.net
>>862
黙れよキチガイ
theApp()はtheAppかthisの間違いだがそれは別にして
メソッドgetMenberA()を有するクラスから始まって、
メソッドgetValue()を有するクラスFooまでの全てのクラス
が完璧にカプセル化された設計の元で
theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862な状況を呈する
これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か
インライ



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

556日前に更新/267 KB
担当:undef