[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/19 07:59 / Filesize : 267 KB / Number-of Response : 1031
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part131



1 名前:デフォルトの名無しさん(ワッチョイ 3b96-ov1m) mailto:sage [2017/07/29(土) 11:28:28.97 ID:o30VDF4g0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

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

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

■長いソースを貼るときはここへ。■
 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
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

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

845 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 11:18:29.65 ID:coFT7XLp0.net]
グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる

ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む

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

847 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:47:25.61 ID:coFT7XLp0.net]
>マルチスレッドで読み書きしてるもんだから予想外のバグが起こる
これはグローバル変数でなくとも起きる設計なら起きるから別件
ていうか
>CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822)
ているケースにあたる

非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ
メソッド内で完結できれば最も安全
パホーマンスや処理の粒度の関係でそれが適さない場合は
トランザクション処理をちゃんと設計汁、

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

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

>>825
必要なデータだけを引数で与えるべき

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

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

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



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

854 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:20:08.45 ID:+enXMbbO0.net]
>>826
>必要なデータだけを引数で与えるべき

引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?

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

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

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

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

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

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

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

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



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

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

865 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:46:49.19 ID:+enXMbbO0.net]
>>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい

クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。

866 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:21:24.53 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:30:22.24 ID:+enXMbbO0.net]
>>843
んー

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

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

main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。

868 名前:817 mailto:sage [2017/10/01(日) 18:34:27.58 ID:SWvA/SVx0.net]
>>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。

こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?

869 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:04:09.96 ID:c8q3kohq0.net]
>>845
起こらないように設計する。

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


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

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

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



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

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

875 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:54:30.69 ID:+enXMbbO0.net]
>>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。

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

一長一短あるのでそれ以外に何かないかなという話

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

877 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:06:34.68 ID:+enXMbbO0.net]
>>853
あなたの意見は>>833以降ずっと一貫しているからいいですよ。

>>823の意見がわかるようでわかりにくい

878 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:15:10.00 ID:P+J8m3XL0.net]
MFC? H社のソフトのことかな?

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

880 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:50:35.76 ID:LFbo+6zld.net]
>>829
無知を謝る必要はない

マルチコアのDSPをOSレスで使うとか

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

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



883 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:08:17.57 ID:A+1idbvt0.net]
>>856
起こるわけないが

884 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:28:49.53 ID:LFbo+6zld.net]
意図的じゃないdelete

885 名前:デフォルトの名無しさん [2017/10/02(月) 15:27:40.28 ID:jSh1mr/v0.net]
> プログラムのあらゆる箇所で
>  theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった

本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー

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

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

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

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

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

891 名前:デフォルトの名無しさん [2017/10/02(月) 20:36:13.43 ID:/AEbHlJU0.net]
Valkan行こう

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



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

894 名前:涛W開による最適化を期待するぐらいしか手が無い []
[ここ壊れてます]

895 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:11:53.92 ID:AOU4wQiN0.net]
まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが
そんなことが最初からできるなら苦労は無い、

896 名前:デフォルトの名無しさん [2017/10/03(火) 05:23:10.92 ID:ZkSEHHAS0.net]
> カプセル化を諦めて途中までグローバル変数

ヘボ野郎

897 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:26:50.04 ID:tYdASm94H.net]
二次元配列の中身を1命令で一気に出力する方法はないでしょうか
いちいち2重ループかくのめんどくさいです

898 名前:デフォルトの名無しさん [2017/10/03(火) 16:01:22.87 ID:ZkSEHHAS0.net]
CならあるがC++では一般的な方法はない

899 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:18.00 ID:vTZ8MAnuM.net]
>>874
Cでの方法を教えていただけると嬉しいです

900 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:57.77 ID:vTZ8MAnuM.net]
すいませんIDかわりました
>>875>>873です

901 名前:デフォルトの名無しさん [2017/10/03(火) 16:20:42.09 ID:ZkSEHHAS0.net]
俺も暇なヤツだなw

template <typename T> void print_dim(T&);

template <typename T, int RANK>
struct print_dim_t
{
void doit(T& x)
{
for(auto& y : x) print_dim(y);
}
};

template <typename T>
struct print_dim_t<T, 1>
{
void doit(T& x)
{
for(auto& y : x) std::cout << y << ',';
}
};

template <typename T>
void print_dim(T& x)
{
print_dim_t<T, std::rank_v<T>> obj;
obj.doit(x);
}

902 名前:デフォルトの名無しさん [2017/10/03(火) 16:34:48.99 ID:ZkSEHHAS0.net]
#define print_dim(array, type) do_print_dim_##type((type *)&array, (type *)(&array + 1))

void do_print_dim_int(int *first, int *last)
{
for(int *p = first; p != last; p++) printf(" %d", *p);
}



903 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 16:54:32.30 ID:hqWXgVBV0.net]
暇じゃないので横着しました
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});

904 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:26:58.85 ID:O2xwfga8d.net]
linuxの質問です
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?

905 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:34:16.19 ID:O2xwfga8d.net]
>>880
親プロセスをスリープにできるだけでも問題ないです

906 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:45:43.87 ID:HMkkIXOid.net]
system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork

907 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:47:36.46 ID:HMkkIXOid.net]
sleep, usleep, nanosleep

908 名前:片山博文MZ mailto:sage [2017/10/04(水) 19:21:33.45 ID:HMkkIXOid.net]
解説が必要ですか?
はい/いいえ

909 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 19:29:13.24 ID:N0mfbhbs0.net]
>>880 上半分だけ
.ko ってデバイスドライバとかのローダブルモジュールじゃないかな。
動作中のカーネルにinsmodで組み込まなきゃ使えないと思うんだけど。

910 名前:885 mailto:sage [2017/10/04(水) 19:36:09.54 ID:N0mfbhbs0.net]
すまん、質問の意図を取り違えたかも。

カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。

911 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:05:29.41 ID:O2xwfga8d.net]
>>884
とても欲しいです..

912 名前:.

>>886
カーネルオブジェクトから外部コマンド(実行ファイル)をコマンド形式で呼び出したいって意味ですね
[]
[ここ壊れてます]



913 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:07:13.92 ID:UdMKuk5G0.net]
ハッカーですね。

914 名前:片山博文MZ mailto:sage [2017/10/04(水) 22:16:13.63 ID:HMkkIXOid.net]
>>882に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?

915 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:19:51.52 ID:O2xwfga8d.net]
>>889
今解説読んでいてsleep関連が終わったとこ
exec関連多すぎて大変

916 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 07:00:51.51 ID:AZey7Nzq0.net]
>>880
ちょいと検索したところ call_usermodehelper て関数があるみたい。

917 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 21:41:51.13 ID:/Agpj2+3d.net]
>>891
今調べたら出てきました!
自分が望んだことできそうですありがとうございます

918 名前:デフォルトの名無しさん [2017/10/06(金) 09:41:37.58 ID:aNGBh62I0.net]
("a,b,c")とは、a,b,cの合計を表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?

919 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 10:15:40.40 ID:tNPv5Oyi0.net]
ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか?
参考にさせて下さい

920 名前:デフォルトの名無しさん [2017/10/06(金) 10:26:06.63 ID:8EN3J+m8d.net]
doxygen方式

921 名前:片山博文MZ mailto:sage [2017/10/06(金) 11:28:24.20 ID:u49AV52wd.net]
>>893
ただのC文字列。

922 名前:893 mailto:sage [2017/10/06(金) 14:25:11.99 ID:aNGBh62I0.net]
>>896
ありがとうございました。



923 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:52:03.20 ID:sTEh17J80.net]
C++リテラル文字列だろ

924 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:54:12.06 ID:sTEh17J80.net]
いや、やっぱただの文字列か

925 名前:デフォルトの名無しさん [2017/10/06(金) 21:08:44.42 ID:vfMxTM1h0.net]
→ の意味教えて下さい。

926 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 21:15:27.43 ID:fyJ+AUec0.net]
そんなものありません。

927 名前:片山博文MZ mailto:sage [2017/10/06(金) 21:46:37.43 ID:u49AV52wd.net]
「ptr->member」は、「(*ptr).member」と同じ意味。

928 名前:900 mailto:sage [2017/10/06(金) 23:48:23.51 ID:vfMxTM1h0.net]
参考書の一部です
fast-uploader.com/file/7062856811993/

どう言う意味なのでしょうか?

929 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:52:15.96 ID:vfMxTM1h0.net]
本を読んでも
 structやunionが具体的に、どの様に動作してるのか分かりません。

930 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:58:13.70 ID:yrQN1jb/0.net]
基本の基本なので、
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。

931 名前:デフォルトの名無しさん [2017/10/07(土) 01:41:08.30 ID:6wfQSWva0.net]
質問です
以下のコードがコンパイルに通りません
class Structure { public: std::string type; };
std::vector< std::unique_ptr<void> > data;

std::unique_ptr<void> structure(new Structure);
structure->type = "HogeHoge";
data.push_back(structure);

>g++ -Wall -std=c++11 -c hogehoge.cpp
>error: ‘std::unique_ptr<void>::pointer {aka void*}’ is not a pointer-to-object type
> structure->type = "HogeHoge";
> ^
std::unique_ptr<void>ではなくて、
std::unique<Structure>にするとコンパイル通りました
voidだとだめなんでしょうか エラーになる理由を教えて下さい

932 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 01:49:12.44 ID:IjrnmnS30.net]
>>906
anyつかえ。



933 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 05:28:19.29 ID:9j2tI+ab0.net]
>>900
こりゃ -> の誤植だな。
印刷屋さんがC知らなくて矢印記号と思ったんだな。
コード部分は執筆者が念を入れてチェックしなきゃね。

934 名前:デフォルトの名無しさん [2017/10/07(土) 08:30:30.38 ID:r58+Koxz0.net]
>>906
エラーメッセージに書いてあるだろ <

935 名前:br> structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと
おまえさんはvoid = char const*;をやろうとしたんだよ
[]
[ここ壊れてます]

936 名前:デフォルトの名無しさん [2017/10/07(土) 08:31:55.56 ID:r58+Koxz0.net]
あ、すまんちょいミスった
指摘できるやついる?解説頼むわ

937 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 08:41:11.20 ID:eyY86HOM0.net]
>>906
unique_ptrあんまりしらんから想像で書くけど
そいつがデストラクタまで管理したいからvoidじゃなくてちゃんと型渡せってことじゃね

938 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:00:22.02 ID:y2Dkbadu0.net]
>>906
> エラーになる理由を教えて下さい
void 型の変数なんてないから
そもそも何をしたいんだよ...

939 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:03:55.62 ID:7nonADk70.net]
unique_ptr<void>という型なので、
中にtypeというメンバーがあることがコンパイラからはわからない。

static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。

940 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:27:45.88 ID:7nonADk70.net]
>>913の最後の行は勘違いだった。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。

941 名前: mailto:sage [2017/10/07(土) 11:35:23.13 ID:NngrEkye0.net]
unique_ptr<void *> だとどうなる?

942 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 11:58:47.95 ID:rHfSD+zL0.net]
>>913
delete できないからね
voidを渡すんならカスタムデリータもセットにしなきゃならない。

template <typename T>
struct vp_deleter {
void operator ()(void *p)const
{
delete static_cast<T*>(p);
}
};

std::unique_ptr<void, vp_deleter<int>> a(new int(8));

なら通った。



943 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:19:56.83 ID:jvf7kHO4M.net]
void型なんて定義もなければサイズもないから
素で使うがそもそもNG

944 名前:デフォルトの名無しさん [2017/10/07(土) 12:36:08.56 ID:6wfQSWva0.net]
>>907
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります

void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<267KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef