X



C++相談室 part131 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 3b96-ov1m)
垢版 |
2017/07/29(土) 11:28:28.97ID:o30VDF4g0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part130
http://mevius.2ch.net/test/read.cgi/tech/1490917669/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 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
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0779デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/26(火) 10:35:57.85ID:DAuKDJeY0
>>776
このスレ的にはって書いてあるのが読めてないのか
自分が苦手なものに触れられたくないのか
どっちだ?
0781デフォルトの名無しさん (ワッチョイ fa91-PvnN)
垢版 |
2017/09/26(火) 11:38:28.30ID:XSwUFkBD0
つかぬことを伺いますが、
あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、
外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません
どうすればよいのでしょうか

〜ヘッダ内
class Hage{
public:
struct A{
int a;
int b;
};

static const struct A M;

}

〜ソース内
#include "ヘッダ"
const struct A Hage::M; //不正
0786デフォルトの名無しさん (ワッチョイ d311-Dc1X)
垢版 |
2017/09/26(火) 15:18:58.40ID:SDiSqFpw0
###HUM###
000-K,AZ,0,1,
001-KI,L,I.T,DEF,11.2,TE,F,0.12235,
002-EM,OBLA,7##END
0787デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/26(火) 15:24:00.47ID:DAuKDJeY0
>>780
うわーおまえ、それ人に聞かなきゃ判んねえの?

省略記号は右端という初歩の初歩でミスりながら
ドヤってる笑い地獄が2日前あったんだが
突っ込めなきゃせっかくボケた芸人も泣いてるだろうな
0792デフォルトの名無しさん (オッペケ Sra3-t5bw)
垢版 |
2017/09/26(火) 19:31:39.64ID:T9NefDHyr
>const struct A Hage::M; //不正

初歩的でなく相当に高度な気がしてならない
規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない
「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので
0798デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 00:14:02.46ID:LyDwKMB00
>>788
おーいバカ、省略記号の位置の件はわかったか?
まさか789なみの重度池沼じゃねえよな
0800デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 00:57:18.03ID:LyDwKMB00
だからって770の大ボケを正当化する法はあんめえ
0802デフォルトの名無しさん (ワッチョイ eb11-Dc1X)
垢版 |
2017/09/27(水) 09:12:11.59ID:nsBNhogE0
>>800
お前まだ分からんのか・・・
>>770のどこが大ボケなんだよ
添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり
パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり
なんてのはCでもC++でも出来ないの
お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら
>>770を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ

質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ
憂さ晴らしにしか利用しないのなら出ていけ
0803デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 09:30:35.39ID:LyDwKMB00
文面上の省略だっておw
大ボケに苦しい言い訳を上塗りして
アフォから超アフォに進化したなあ
0805デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 10:03:04.41ID:LyDwKMB00
どう見ても770だな
必死さの理由が他にない
0807デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 11:12:43.27ID:LyDwKMB00
驚いた、ム板にIP信者がいるとはね
嘆かわしい限りだ
0810デフォルトの名無しさん (ワッチョイ de1c-iatd)
垢版 |
2017/09/27(水) 14:47:33.57ID:LyDwKMB00
大ボケ+言い訳+IP信者+錯乱

この安定したアフォぶりは、どう見ても同一人物だなw
0811デフォルトの名無しさん (ワッチョイ 1511-Txnz)
垢版 |
2017/09/29(金) 01:30:30.30ID:ppl3WHHK0
%%%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
0817デフォルトの名無しさん (ワッチョイ 234c-Txnz)
垢版 |
2017/09/30(土) 01:39:01.97ID:zjlhf9G/0
VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、
これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか?
グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?
0821デフォルトの名無しさん (ワッチョイ 4b1c-HyX/)
垢版 |
2017/10/01(日) 04:08:21.65ID:EFR2vscz0
あーこの人、こうやっちゃったんだ(ニヤニヤ
しながら使うもの
ARM C++ベースなんで同情するところもあるけどね
0822デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
垢版 |
2017/10/01(日) 11:18:29.65ID:coFT7XLp0
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる

ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む
0823デフォルトの名無しさん (ワッチョイ 032e-asy+)
垢版 |
2017/10/01(日) 12:31:41.44ID:A+1idbvt0
平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる
そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある
マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する
俺切れる
0824デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
垢版 |
2017/10/01(日) 12:47:25.61ID:coFT7XLp0
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる

非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、
0826デフォルトの名無しさん (ワッチョイ 032e-asy+)
垢版 |
2017/10/01(日) 14:12:37.21ID:A+1idbvt0
>>824
ちょっと足りなかったわ
マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある
そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する

>>825
必要なデータだけを引数で与えるべき
0832デフォルトの名無しさん (ワッチョイ 2311-KCdQ)
垢版 |
2017/10/01(日) 15:35:52.14ID:7TdPvZgo0
>>831
> 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
再帰的にたどって行けばいいだけかと
プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし
0834デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
垢版 |
2017/10/01(日) 15:41:47.38ID:coFT7XLp0
んまーマルチスレッド機能有りのOSであり
 (1) OSがプリエンプトしてくるのを止めるAPIが無い
 (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる
0836デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
垢版 |
2017/10/01(日) 15:51:28.11ID:coFT7XLp0
しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、
0841デフォルトの名無しさん (ワッチョイ 032e-asy+)
垢版 |
2017/10/01(日) 17:18:14.77ID:A+1idbvt0
>>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない
0842デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
垢版 |
2017/10/01(日) 17:46:49.19ID:+enXMbbO0
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。
0843デフォルトの名無しさん (ワッチョイ 032e-asy+)
垢版 |
2017/10/01(日) 18:21:24.53ID:A+1idbvt0
>>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();

とかこんな風にする
0844デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
垢版 |
2017/10/01(日) 18:30:22.24ID:+enXMbbO0
>>843
んー

>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

「あるいは」ってどういう意味?

main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。
0845817 (ワッチョイ 234c-Txnz)
垢版 |
2017/10/01(日) 18:34:27.58ID:SWvA/SVx0
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。

こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?
0847デフォルトの名無しさん (ワッチョイ 032e-asy+)
垢版 |
2017/10/01(日) 19:06:45.42ID:A+1idbvt0
>>844
普通なパブリックなメンバでいいと思うけど
その所有権をもったクラスの寿命が尽きたら同時に開放される


>>845
もちろん参照元からは参照先の実態があることが保障されないのでよくある
特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した
0852デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
垢版 |
2017/10/01(日) 19:54:30.69ID:+enXMbbO0
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。

普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く

一長一短あるのでそれ以外に何かないかなという話
0853デフォルトの名無しさん (ワッチョイ ed4d-IQJU)
垢版 |
2017/10/01(日) 20:03:44.13ID:P+J8m3XL0
別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。
0856デフォルトの名無しさん (ワッチョイ 234c-Txnz)
垢版 |
2017/10/01(日) 22:22:01.91ID:SWvA/SVx0
>>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)
0862デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
垢版 |
2017/10/02(月) 15:27:40.28ID:jSh1mr/v0
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった

本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー
0863デフォルトの名無しさん (ワッチョイ 458a-gyUt)
垢版 |
2017/10/02(月) 17:30:53.86ID:wJY11lw/0
最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。
0864デフォルトの名無しさん (ワッチョイ 03eb-IQJU)
垢版 |
2017/10/02(月) 17:45:41.63ID:M0wavUvt0
DXLibがSTG制作に特化したライブラリ…
0865デフォルトの名無しさん (ワッチョイ 458a-gyUt)
垢版 |
2017/10/02(月) 18:07:53.55ID:wJY11lw/0
>>864
何かおかしなことを言っていたらすみません。
STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。
0867デフォルトの名無しさん (ワッチョイ 458a-gyUt)
垢版 |
2017/10/02(月) 20:27:58.95ID:wJY11lw/0
OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?
0868デフォルトの名無しさん (ワッチョイ c57f-Txnz)
垢版 |
2017/10/02(月) 20:36:13.43ID:/AEbHlJU0
Valkan行こう
0870デフォルトの名無しさん (ワッチョイ 23bd-+G6K)
垢版 |
2017/10/03(火) 00:06:57.08ID:AOU4wQiN0
>>862
黙れよキチガイ
theApp()はtheAppかthisの間違いだがそれは別にして
メソッドgetMenberA()を有するクラスから始まって、
メソッドgetValue()を有するクラスFooまでの全てのクラス
が完璧にカプセル化された設計の元で
theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862な状況を呈する
これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か
インライン展開による最適化を期待するぐらいしか手が無い
0872デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
垢版 |
2017/10/03(火) 05:23:10.92ID:ZkSEHHAS0
> カプセル化を諦めて途中までグローバル変数

ヘボ野郎
0874デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
垢版 |
2017/10/03(火) 16:01:22.87ID:ZkSEHHAS0
CならあるがC++では一般的な方法はない
■ このスレッドは過去ログ倉庫に格納されています