C++相談室 part135
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq)
垢版 |
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/

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

■長いソースを貼るときはここへ。■
 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
0071名無し@キムチ (ワッチョイ 25b3-1Lkb)
垢版 |
2018/04/06(金) 21:32:34.54ID:VpnYoE0I0
>>68
まだ正式なリファレンスはいろいろ暇がなくて読んでない。
日本語で簡単に解説してあるウェブサイトは見たけど、
取得したFBXファイルのいろんな情報を文字列で表示するプログラムが載ってるだけで、
実際にその3Dオブジェクトを画面に表示する方法が載ってない。日本語のサイトで解説してあるのは、どうもここまでみたいなので、
やはり英語の正式なリファレンスを見ないとダメかな?www
0074名無し@キムチ (ワッチョイ 25b3-1Lkb)
垢版 |
2018/04/06(金) 21:40:42.10ID:VpnYoE0I0
>>70
>ゲーム製作板か、CG板の方がいいかもしれない。
いやゲームはもう作りたくないし、CGも特に興味ない。
実はMakeHumanみたいな3Dキャラ作成ツールがつくりたくてね。
まだ始めたばかりで、そこまでの距離は100億光年ばかりあるけど・・・
これってやっぱりちゃんとしたプログラム技術板向きの話題だよね?
0076片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi)
垢版 |
2018/04/06(金) 21:48:02.69ID:eB6IhESGd
ゼロから3D作りたいなら、DirectX, OpenGL, Valkanあたりを勉強することになる。
しかし、ゲームエンジンがなければ、動く3Dは手間がかかる。
0087片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdea-90Yi)
垢版 |
2018/04/06(金) 22:30:40.49ID:eB6IhESGd
CGもオブジェクト指向になっているから、撮影スタジオで実際に物体やカメラの位置を決めるのと同じように、シーンを構築すれば、それが映像になる。
0091デフォルトの名無しさん (ワッチョイ 6db3-psu8)
垢版 |
2018/04/07(土) 00:36:31.30ID:Y5tUUVb30
やたら伸びてると思ったら1人あたりのレス数多すぎだろ(しかも知らんことに口出し過ぎ

fbxsdkは昔ちょっとしか触ってないが、多分そのVSの3Dシーン作成ってのは3Dのモデルやシーンを.fbxに書き出すプロジェクトじゃね?
そういうのは多分Maya使った方が早いしfbxsdkはどっちにしても要る
あとDirect3D使うならそっちのスレ行ってくれ
0093デフォルトの名無しさん (ワッチョイ ca34-glfZ)
垢版 |
2018/04/08(日) 02:09:06.48ID:+gqqNGFK0
static_cast … 無理のない互換性のある変換。
reinterpret_cast … int から void* 等への強制変換 c の ()キャストと同じ。
const_cast … const 付きから const を無くしたりまたはその逆の変換。
dynamic_cast … 実行時型情報を使って実行時に型情報で互換性を見比べながらの変換。実行時型情報とのリンクが必須。
0094はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fe6f-vJpg)
垢版 |
2018/04/08(日) 03:14:37.94ID:RvzgDq0H0
>>92
C スタイルのキャストは dynamic_cast 以外の C++ スタイルキャストを兼ね備えている。
安全なキャストも危険なキャストも見た目にわかんないから、
うっかり危険なキャストをしないようにカテゴリ分けしたやつを使った方がいいなって話。

reinterpret_cast や const_cast がどうしても必要な状況になったら、
それはそのプログラムが悪いデザインだというサインだ。
(デバイスドライバとか OS とかの低水準プログラムだと仕方なく使う機会は多いかもしれないけど)
0095デフォルトの名無しさん (ワッチョイ 2d93-SKFW)
垢版 |
2018/04/08(日) 06:15:21.60ID:fQMOYFpe0
『プログラミング言語C++』第4版のどこだったかに、
「危険なキャストを行っているソース箇所が目立つように
reinterpret_cast<型> のような長い綴りで見た目もスマートでない
キーワードを選んで導入した」みたいなことが書いてあったな。
0098デフォルトの名無しさん (ワッチョイ 2d7f-vJpg)
垢版 |
2018/04/08(日) 11:44:19.45ID:rArjzNgz0
C形式のキャストは絶対に使うなって事だよ
0101デフォルトの名無しさん
垢版 |
2018/04/08(日) 12:07:31.24ID:NQAA1W7E0
>>99>>100
めっちゃ難しそうな回答きた・・
ちょっと調べて頑張ってみますありがとうございます
0104デフォルトの名無しさん
垢版 |
2018/04/08(日) 12:34:24.71
>>96
・str2はポインタの配列、idxはstr2の添字とする
・1文字ずつループして以下を処理
 「=」が現れるまでまで読み飛ばす
 「 」「"」以外の文字が現れたらstr2[idx++]にその文字へのポインタ格納
・「;」までスキップして¥0に置き換え
0121デフォルトの名無しさん (ワッチョイ ca34-glfZ)
垢版 |
2018/04/09(月) 22:38:54.59ID:J7f8Y+mC0
>>118
互換性には2種類ある
クラスポインタ変換の場合を例に挙げると
一つは拡張クラスからベースクラスへのアップキャスト
こちらはキャストの明示は必要ない暗黙の型変換が行える
もう一つはベースクラスから拡張クラスへのダウンキャスト
こちらはベースから拡張クラスへの変換に確証が得られている
わけではないのでstatic_castを用いて変換してやらないといけない
このときdynamic_castを使うと実行時に型をチェックしてくれる
のでよりstrictな変換を行わせることができる
できるといってもエラーを発生させるかさせないかの違いだけだけど
0124デフォルトの名無しさん
垢版 |
2018/04/10(火) 09:48:42.17ID:PdcJoG7U0
コンソールプログラムのwhile()ループで1文字入力したらループを抜けるときに使うやつって何でしたっけ・・
while(!getchar())だと文字を受けるまで処理がとまってしまいますが、止まらないやつがあったと思うのですが
0127デフォルトの名無しさん
垢版 |
2018/04/10(火) 11:04:35.34ID:PdcJoG7U0
>>125
getch()絡みで調べてたらkbhit()って出てきましたこれです
ありがとうございました
ちゃんと任意のキー押したら抜けれました
0129デフォルトの名無しさん
垢版 |
2018/04/11(水) 08:10:31.14ID:T4s6uHOl0
>>128
まずいですかね?
一日ランニング試験してみたんですが良い感じに動いてるのですが・・
0132デフォルトの名無しさん (ワッチョイ ffbd-zmT2)
垢版 |
2018/04/14(土) 12:01:39.22ID:bHi1VZVu0
低優先度タスクからのプリエンプションが無いOSでSleep(100 ms)したら
優先度関係無く他タスクに100 msを超えて待たされてしまうかもしれない
Sleep()は実行権放棄の呪文としては強力すぐる…
0142デフォルトの名無しさん (ワッチョイ ff68-LJHW)
垢版 |
2018/04/14(土) 23:08:51.81ID:WAEnZz2X0
済みません、途中送信してしまいました・・・

Class A
{
  B* _b;

  void A(B* &b)
  {
    _b = b;
    _b = new B();
  }
};

B* b;
A* a = new A(b);
b←newされてない・・・

クラスAのコンストラクタでクラスBのインスタンスを受け取り
newで新たなインスタンスを作成したうえで返そうと思います。
しかし上記のようなプログラムを作成してもインスタンスbは
newされてませんでした。

どうしたらbをnewしたうえで返すことができるようになるでしょうか?
0158デフォルトの名無しさん
垢版 |
2018/04/15(日) 06:03:36.65
>>142
>  void A(B* &b)
>  {
>    _b = b;
>    _b = new B();
>  }

  void A(B* &b)
  {
    B* new_b = new B();
    b = new_b;
    _b = new_b;
  }

こういうのは愚直に書けばええんや
0159デフォルトの名無しさん (ワッチョイ a393-R+MU)
垢版 |
2018/04/15(日) 08:25:34.99ID:IUBKEb9a0
AのコンストラクタにBへのポインタのポインタだか参照だかを渡さなくても
Bへのポインタと関係ないAのコンストラクタ、と
A内部のBメンバへのポインタを返すゲッタ、との
組み合わせにする方が素直でねぇか?

class A
{
  B* _b;

public:
  A() {_b = new B();}
  B* ptr_b() const {return _b;}
};

int main(void)
{
  A* a = new A();
  B* b = a->ptr_b();

  return 0;
}


別に確保した「Bを格納すべき領域へのポインタ」を受け取って、
Aの初期化時にBの配置newを行わせたい、という意図かもしれないけど、
元の質問から想像を広げすぎてるよね。
0162142 (ワッチョイ ff68-LJHW)
垢版 |
2018/04/15(日) 11:01:19.87ID:GeT3puOg0
舌足らずでもうしわけありませんでした・・・

クラスBのインスタンスをクラスAで処理していくためにコンストラクタでクラスBの
インスタンスを参照受け取りする仕様にしました。

大半のケースではそのまま処理して終わり、なのですが
まれに受け取ったクラスBのインスタンスをnewし直す必要がありまして
その際受け取ったクラスAのメンバ変数 _b をnewしても受け取り元のインスタンスを
newできないことに悩んでいました

ただオブジェクト指向の観点から見るとあまり美しいプログラミングスタイルでは無いのかもしれませんね。
クラスBのインスタンスはクラスA内部で完全隔離処理するようにした方がいいのかもしれません
0163デフォルトの名無しさん (ワッチョイ 6fe7-8Ez4)
垢版 |
2018/04/15(日) 11:19:51.96ID:6WpjLuna0
BをAしか使わないならAの中に隔離する
他でも使う必要があって、Aの外部でBの寿命を管理してるなら、AにrefreshB()みたいなBをnewし直した時に渡し直す関数を用意する
でいいんじゃないの
本当にBをnewし直す(メモリ上再配置する)必要があるならだけど

実はB自体にreset()用意するだけで済む話のように見える
0168デフォルトの名無しさん (アウアウオー Sadf-vcwQ)
垢版 |
2018/04/15(日) 23:39:26.36ID:Mp1WrgTGa
質問あるのですが、
同一PC内の画面機能と処理機能のプロセス間通信はどうやるのが便利ですか?
画面更新速度は100ms周期くらいです。

共有メモリがいいと思ったんですが、ソケット推してる人がいてもやもや
アクセス速度とかNICの通信量とか考えると共有メモリ一択な気がするんですが、どうなんでしょうか?

パイプとマップドメモリはメリット無いので考えていません。
■ このスレッドは過去ログ倉庫に格納されています