次スレを立てる時は本文の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
探検
C++相談室 part131 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 3b96-ov1m)
2017/07/29(土) 11:28:28.97ID:o30VDF4g0834デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
2017/10/01(日) 15:41:47.38ID:coFT7XLp0 んまーマルチスレッド機能有りのOSであり
(1) OSがプリエンプトしてくるのを止めるAPIが無い
(2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる
(1) OSがプリエンプトしてくるのを止めるAPIが無い
(2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる
としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる
835デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
2017/10/01(日) 15:43:55.69ID:coFT7XLp0836デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
2017/10/01(日) 15:51:28.11ID:coFT7XLp0 しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、
というのは同意
マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら
interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、
837デフォルトの名無しさん (ワッチョイ 2311-KCdQ)
2017/10/01(日) 15:52:05.08ID:7TdPvZgo0 >>834-835
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?
Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?
838デフォルトの名無しさん (ワッチョイ 23c5-+G6K)
2017/10/01(日) 15:59:29.84ID:coFT7XLp0839デフォルトの名無しさん (ワッチョイ cbdb-IQJU)
2017/10/01(日) 16:05:24.82ID:a+6SxdIf0 atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。
840デフォルトの名無しさん (ブーイモ MM09-7+n4)
2017/10/01(日) 17:15:48.85ID:zBOS+jx9M ミューテックスが何だって?
くだらねえ話しやがって・・
くだらねえ話しやがって・・
841デフォルトの名無しさん (ワッチョイ 032e-asy+)
2017/10/01(日) 17:18:14.77ID:A+1idbvt0 >>831
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない
どんどん上にたどっていく
そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき
あとコードを使いまわすときにも障害になる
ファイルにまとめて他でincludeしてもそのまま使えない
842デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
2017/10/01(日) 17:46:49.19ID:+enXMbbO0 >>841
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味?
それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。
843デフォルトの名無しさん (ワッチョイ 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();
とかこんな風にする
言ってる意味がわからない
クラス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();
とかこんな風にする
844デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
2017/10/01(日) 18:30:22.24ID:+enXMbbO0 >>843
んー
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
「あるいは」ってどういう意味?
main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。
んー
>そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい
「あるいは」ってどういう意味?
main関数内に持つ方はわかるんですよ。
そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから
スタティックメンバなのかな?と思った。
845817 (ワッチョイ 234c-Txnz)
2017/10/01(日) 18:34:27.58ID:SWvA/SVx0 >>820
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。
こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?
では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、
以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。
こういったやり方でふとよぎった不安なんですが、
長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、
例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?
846デフォルトの名無しさん (ワッチョイ 6389-Vnaa)
2017/10/01(日) 19:04:09.96ID:c8q3kohq0 >>845
起こらないように設計する。
起こらないように設計する。
847デフォルトの名無しさん (ワッチョイ 032e-asy+)
2017/10/01(日) 19:06:45.42ID:A+1idbvt0848デフォルトの名無しさん (ワッチョイ 456f-50d/)
2017/10/01(日) 19:24:06.85ID:8m985+fI0 「クラスの寿命」とかもう難しすぎてついていけんわ
849デフォルトの名無しさん (ワッチョイ 032e-asy+)
2017/10/01(日) 19:38:58.01ID:A+1idbvt0850デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
2017/10/01(日) 19:42:13.70ID:+enXMbbO0 うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね
851デフォルトの名無しさん (ワッチョイ ed4d-IQJU)
2017/10/01(日) 19:51:59.11ID:P+J8m3XL0 悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。
852デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
2017/10/01(日) 19:54:30.69ID:+enXMbbO0 >>849
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。
普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く
一長一短あるのでそれ以外に何かないかなという話
寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、
「a というデータはクラスBのオブジェクトbに持たせればいい」では
じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。
普通のグローバル変数やシングルトン
theAppにぶら下げるの
mainの中に置く
一長一短あるのでそれ以外に何かないかなという話
853デフォルトの名無しさん (ワッチョイ ed4d-IQJU)
2017/10/01(日) 20:03:44.13ID:P+J8m3XL0 別に永続化、シリアライズの話までしてないわけでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。
mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。
854デフォルトの名無しさん (ワッチョイ 23aa-Txnz)
2017/10/01(日) 20:06:34.68ID:+enXMbbO0855デフォルトの名無しさん (ワッチョイ ed4d-IQJU)
2017/10/01(日) 20:15:10.00ID:P+J8m3XL0 MFC? H社のソフトのことかな?
856デフォルトの名無しさん (ワッチョイ 234c-Txnz)
2017/10/01(日) 22:22:01.91ID:SWvA/SVx0 >>846
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)
>>もちろん参照元からは参照先の実態があることが保障されないのでよくある
ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか?
(ガベージコレクションみたいなことが)
857デフォルトの名無しさん (スップ Sd43-vp8x)
2017/10/01(日) 22:50:35.76ID:LFbo+6zld858デフォルトの名無しさん (スップ Sd43-vp8x)
2017/10/01(日) 22:54:38.73ID:LFbo+6zld859デフォルトの名無しさん (スップ Sd43-vp8x)
2017/10/01(日) 23:00:12.89ID:LFbo+6zld860デフォルトの名無しさん (ワッチョイ 032e-asy+)
2017/10/01(日) 23:08:17.57ID:A+1idbvt0 >>856
起こるわけないが
起こるわけないが
861デフォルトの名無しさん (スップ Sd43-vp8x)
2017/10/01(日) 23:28:49.53ID:LFbo+6zld 意図的じゃないdelete
862デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
2017/10/02(月) 15:27:40.28ID:jSh1mr/v0 > プログラムのあらゆる箇所で
> theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった
本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー
> theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
> と書かねばならなかった
本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな
関数化かキャッシュするだろふつー
863デフォルトの名無しさん (ワッチョイ 458a-gyUt)
2017/10/02(月) 17:30:53.86ID:wJY11lw/0 最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか?
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。
Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。
864デフォルトの名無しさん (ワッチョイ 03eb-IQJU)
2017/10/02(月) 17:45:41.63ID:M0wavUvt0 DXLibがSTG制作に特化したライブラリ…
865デフォルトの名無しさん (ワッチョイ 458a-gyUt)
2017/10/02(月) 18:07:53.55ID:wJY11lw/0866デフォルトの名無しさん (ワッチョイ 037e-asy+)
2017/10/02(月) 19:07:36.56ID:SPyFybU20 それはDirectXの薄いラッパなので何に特化しているとかはない
マルチプラットフォームで作りたいならOpenGLで作れ
マルチプラットフォームで作りたいならOpenGLで作れ
867デフォルトの名無しさん (ワッチョイ 458a-gyUt)
2017/10/02(月) 20:27:58.95ID:wJY11lw/0 OpenGLか…
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?
難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?
868デフォルトの名無しさん (ワッチョイ c57f-Txnz)
2017/10/02(月) 20:36:13.43ID:/AEbHlJU0 Valkan行こう
869デフォルトの名無しさん (ワッチョイ 4b5f-Z710)
2017/10/02(月) 22:38:15.66ID:O4roxos+0 >>845
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい
それぞれアクセス関数が用意されているので馬鹿なことはやめなさい
870デフォルトの名無しさん (ワッチョイ 23bd-+G6K)
2017/10/03(火) 00:06:57.08ID:AOU4wQiN0871デフォルトの名無しさん (ワッチョイ 23bd-+G6K)
2017/10/03(火) 00:11:53.92ID:AOU4wQiN0 まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが
そんなことが最初からできるなら苦労は無い、
そんなことが最初からできるなら苦労は無い、
872デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
2017/10/03(火) 05:23:10.92ID:ZkSEHHAS0 > カプセル化を諦めて途中までグローバル変数
ヘボ野郎
ヘボ野郎
873デフォルトの名無しさん (JP 0H4b-IV3n)
2017/10/03(火) 15:26:50.04ID:tYdASm94H 二次元配列の中身を1命令で一気に出力する方法はないでしょうか
いちいち2重ループかくのめんどくさいです
いちいち2重ループかくのめんどくさいです
874デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
2017/10/03(火) 16:01:22.87ID:ZkSEHHAS0 CならあるがC++では一般的な方法はない
875デフォルトの名無しさん (ワンミングク MMa3-IV3n)
2017/10/03(火) 16:16:18.00ID:vTZ8MAnuM >>874
Cでの方法を教えていただけると嬉しいです
Cでの方法を教えていただけると嬉しいです
877デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
2017/10/03(火) 16:20:42.09ID:ZkSEHHAS0 俺も暇なヤツだな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);
}
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);
}
878デフォルトの名無しさん (ワッチョイ 4b32-HyX/)
2017/10/03(火) 16:34:48.99ID:ZkSEHHAS0 #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);
}
void do_print_dim_int(int *first, int *last)
{
for(int *p = first; p != last; p++) printf(" %d", *p);
}
879デフォルトの名無しさん (ワッチョイ 4b5f-1bc6)
2017/10/03(火) 16:54:32.30ID:hqWXgVBV0 暇じゃないので横着しました
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});
int* it = (int*) mat;
for_each(it, it + ROW * COL, [](int i){cout << i << " ";});
880デフォルトの名無しさん (スプッッ Sd03-h4xY)
2017/10/04(水) 18:26:58.85ID:O2xwfga8d linuxの質問です
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?
・koファイルからコマンドライン実行で実行ファイルを実行したい
どうやって実現するか調べてもわからなくてやり方教えて欲しいです
A --B みたいな呼び出しかたをしたい
・複数スレッドを立てているBプロセスを
全スレッドsleepにすることできる?
881デフォルトの名無しさん (スプッッ Sd03-h4xY)
2017/10/04(水) 18:34:16.19ID:O2xwfga8d >>880
親プロセスをスリープにできるだけでも問題ないです
親プロセスをスリープにできるだけでも問題ないです
882片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)
2017/10/04(水) 18:45:43.87ID:HMkkIXOid system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork
883片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)
2017/10/04(水) 18:47:36.46ID:HMkkIXOid sleep, usleep, nanosleep
884片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)
2017/10/04(水) 19:21:33.45ID:HMkkIXOid 解説が必要ですか?
はい/いいえ
はい/いいえ
885デフォルトの名無しさん (ワッチョイ c593-bw2Z)
2017/10/04(水) 19:29:13.24ID:N0mfbhbs0886885 (ワッチョイ c593-bw2Z)
2017/10/04(水) 19:36:09.54ID:N0mfbhbs0 すまん、質問の意図を取り違えたかも。
カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。
カーネルモジュールの中から外部コマンドを呼びたいって話かな。
可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、
具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。
887デフォルトの名無しさん (スプッッ Sd03-h4xY)
2017/10/04(水) 22:05:29.41ID:O2xwfga8d888デフォルトの名無しさん (ワッチョイ ed83-IQJU)
2017/10/04(水) 22:07:13.92ID:UdMKuk5G0 ハッカーですね。
889片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)
2017/10/04(水) 22:16:13.63ID:HMkkIXOid >>882に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?
890デフォルトの名無しさん (スプッッ Sd03-h4xY)
2017/10/04(水) 22:19:51.52ID:O2xwfga8d891デフォルトの名無しさん (ワッチョイ 5593-Xc0J)
2017/10/05(木) 07:00:51.51ID:AZey7Nzq0 >>880
ちょいと検索したところ call_usermodehelper て関数があるみたい。
ちょいと検索したところ call_usermodehelper て関数があるみたい。
892デフォルトの名無しさん (スプッッ Sdda-+XcG)
2017/10/05(木) 21:41:51.13ID:/Agpj2+3d893デフォルトの名無しさん (ワッチョイ eef2-qWqy)
2017/10/06(金) 09:41:37.58ID:aNGBh62I0 ("a,b,c")とは、a,b,cの合計を表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?
それとも、a,b,c各それぞれを表すのでしょうか?
894デフォルトの名無しさん (ワッチョイ aaeb-wbjw)
2017/10/06(金) 10:15:40.40ID:tNPv5Oyi0 ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか?
参考にさせて下さい
参考にさせて下さい
895デフォルトの名無しさん (スプッッ Sdda-Qn8V)
2017/10/06(金) 10:26:06.63ID:8EN3J+m8d doxygen方式
898デフォルトの名無しさん (ワッチョイ da34-HxEp)
2017/10/06(金) 19:52:03.20ID:sTEh17J80 C++リテラル文字列だろ
899デフォルトの名無しさん (ワッチョイ da34-HxEp)
2017/10/06(金) 19:54:12.06ID:sTEh17J80 いや、やっぱただの文字列か
900デフォルトの名無しさん (ワッチョイ 76b3-yS8h)
2017/10/06(金) 21:08:44.42ID:vfMxTM1h0 → の意味教えて下さい。
901デフォルトの名無しさん (ワッチョイ 5504-CLk5)
2017/10/06(金) 21:15:27.43ID:fyJ+AUec0 そんなものありません。
902片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
2017/10/06(金) 21:46:37.43ID:u49AV52wd 「ptr->member」は、「(*ptr).member」と同じ意味。
903900 (ワッチョイ 76b3-yS8h)
2017/10/06(金) 23:48:23.51ID:vfMxTM1h0904デフォルトの名無しさん (ワッチョイ 76b3-yS8h)
2017/10/06(金) 23:52:15.96ID:vfMxTM1h0 本を読んでも
structやunionが具体的に、どの様に動作してるのか分かりません。
structやunionが具体的に、どの様に動作してるのか分かりません。
905デフォルトの名無しさん (ワッチョイ da34-qTMp)
2017/10/06(金) 23:58:13.70ID:yrQN1jb/0 基本の基本なので、
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。
先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。
その上で、判らない事を質問すべき。
906デフォルトの名無しさん (ワッチョイ 1ab3-3Fj1)
2017/10/07(土) 01:41:08.30ID:6wfQSWva0 質問です
以下のコードがコンパイルに通りません
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だとだめなんでしょうか エラーになる理由を教えて下さい
以下のコードがコンパイルに通りません
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だとだめなんでしょうか エラーになる理由を教えて下さい
907デフォルトの名無しさん (ワッチョイ 5504-CLk5)
2017/10/07(土) 01:49:12.44ID:IjrnmnS30 >>906
anyつかえ。
anyつかえ。
908デフォルトの名無しさん (ワッチョイ 5593-Xc0J)
2017/10/07(土) 05:28:19.29ID:9j2tI+ab0909デフォルトの名無しさん (ワッチョイ b632-rzHd)
2017/10/07(土) 08:30:30.38ID:r58+Koxz0 >>906
エラーメッセージに書いてあるだろ
structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと
おまえさんはvoid = char const*;をやろうとしたんだよ
エラーメッセージに書いてあるだろ
structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと
おまえさんはvoid = char const*;をやろうとしたんだよ
910デフォルトの名無しさん (ワッチョイ b632-rzHd)
2017/10/07(土) 08:31:55.56ID:r58+Koxz0 あ、すまんちょいミスった
指摘できるやついる?解説頼むわ
指摘できるやついる?解説頼むわ
911デフォルトの名無しさん (ワッチョイ aa9b-ucRI)
2017/10/07(土) 08:41:11.20ID:eyY86HOM0912デフォルトの名無しさん (ワッチョイ dab3-Nz6W)
2017/10/07(土) 09:00:22.02ID:y2Dkbadu0913デフォルトの名無しさん (ワッチョイ b651-iGo5)
2017/10/07(土) 09:03:55.62ID:7nonADk70 unique_ptr<void>という型なので、
中にtypeというメンバーがあることがコンパイラからはわからない。
static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。
中にtypeというメンバーがあることがコンパイラからはわからない。
static_cast<Structure*>(structure.get())->type = "HogeHoge";
のように明示すればコンパイルだけは通るかと思ったんだが、
こっちだと>>911の問題に引っかかって、その前の行でエラーになる。
914デフォルトの名無しさん (ワッチョイ b651-iGo5)
2017/10/07(土) 09:27:45.88ID:7nonADk70 >>913の最後の行は勘違いだった。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。
こちらの環境だと、unique_ptr<void>の時点でエラーになる。
916デフォルトの名無しさん (ワッチョイ dae7-XSap)
2017/10/07(土) 11:58:47.95ID:rHfSD+zL0 >>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));
なら通った。
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));
なら通った。
917デフォルトの名無しさん (ブーイモ MMfa-0mrS)
2017/10/07(土) 12:19:56.83ID:jvf7kHO4M void型なんて定義もなければサイズもないから
素で使うがそもそもNG
素で使うがそもそもNG
918デフォルトの名無しさん (ワッチョイ 1ab3-3Fj1)
2017/10/07(土) 12:36:08.56ID:6wfQSWva0 >>907
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります
void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました
anyは知りませんでした
stdじゃなくてboostにあるんですね つかってみます
>>909
つまり void*->type は void.type になるってことですね
voidポインタは使ったことなくて、あれから調べたのですが
アクセスする前にキャストが必要だと知りました・・
無知ゆえの初歩的なミスです 指摘ありがとうございます
>>911, >>913, >>916
スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね
カスタムデリータは知りませんでした コード参考になります
void型なのはStructureの他にもプリミティブ型とかも入れたかったからです
boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます
皆さんレスありがとうございました
919デフォルトの名無しさん (スップ Sdda-99fN)
2017/10/07(土) 13:41:40.48ID:j+yonEy7d ひとつのカスタムデリータでいろんな型をdeleteするってなら無理
920デフォルトの名無しさん (ワッチョイ 6e8a-+XcG)
2017/10/07(土) 14:16:25.95ID:LB5EP+Z/0 いまだにforkとthreadの動作の違いがわからない
921デフォルトの名無しさん (ブーイモ MMfa-0mrS)
2017/10/07(土) 14:17:50.50ID:jvf7kHO4M ある配列がありそれを指定した順番で並び替えしたい
std::vector< any_struct_t > array; //これを並び替えたい
std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい
探しているんだけど適当なライブラリが見つからない
標準ライブラリに入ってたりする?
またはアルゴリズムが知りたい
出来ればswap回数が少ない方法が知りたい
std::vector< any_struct_t > array; //これを並び替えたい
std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい
探しているんだけど適当なライブラリが見つからない
標準ライブラリに入ってたりする?
またはアルゴリズムが知りたい
出来ればswap回数が少ない方法が知りたい
922デフォルトの名無しさん (ササクッテロリ Sp75-o/K3)
2017/10/07(土) 15:34:33.81ID:cqowZFEsp 配列もう一個用意してその添え字に移動するんじゃだめなん
923デフォルトの名無しさん (ワッチョイ 7d81-XSap)
2017/10/07(土) 16:00:10.47ID:ZvmF6v7F0 >>922
それが一番速そうだよね
それが一番速そうだよね
924デフォルトの名無しさん (ワントンキン MMea-zCRe)
2017/10/07(土) 16:14:50.00ID:Mcd7mBScM std::vector<any_struct_t> ret(index_list);
std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });
std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });
925デフォルトの名無しさん (ブーイモ MMfa-0mrS)
2017/10/07(土) 16:25:34.07ID:jvf7kHO4M >>924
それタイプミスあります?
でももう一つ配列を用意してコピーする点では
他の方と一緒ですね
別配列を用意せず全てswapで済ます方法も作ってみましたが
これにはindex_listが更に2本必要になり
効率は別配列と変わらないと予想される結果でした
参考になりました
ありがとうございました
それタイプミスあります?
でももう一つ配列を用意してコピーする点では
他の方と一緒ですね
別配列を用意せず全てswapで済ます方法も作ってみましたが
これにはindex_listが更に2本必要になり
効率は別配列と変わらないと予想される結果でした
参考になりました
ありがとうございました
926デフォルトの名無しさん (ワントンキン MMea-zCRe)
2017/10/07(土) 16:38:58.22ID:Mcd7mBScM 一行目初期化はsizeだった
すまん
すまん
927デフォルトの名無しさん (ワッチョイ dae7-XSap)
2017/10/07(土) 16:55:14.57ID:rHfSD+zL0928デフォルトの名無しさん (ワッチョイ 5593-Xc0J)
2017/10/07(土) 17:23:03.40ID:9j2tI+ab0 index_list に含まれる値がそれぞれ重複なく1回だけ出現とか、
いかにも破られそうな条件を暗黙に期待するライブラリ、
てのも変な感じだしねぇ。
いかにも破られそうな条件を暗黙に期待するライブラリ、
てのも変な感じだしねぇ。
929デフォルトの名無しさん (ワッチョイ b651-iGo5)
2017/10/07(土) 17:39:38.90ID:7nonADk70 任意の置換は互換の積で表せるので、swap繰り返せばin-placeで可能。
http://rikei-index.blue.coocan.jp/senkei/teigi4senkei.html
http://rikei-index.blue.coocan.jp/senkei/teigi4senkei.html
930デフォルトの名無しさん (ワッチョイ 5504-CLk5)
2017/10/07(土) 17:47:14.55ID:IjrnmnS30931デフォルトの名無しさん (ワッチョイ dae7-XSap)
2017/10/07(土) 18:00:13.73ID:rHfSD+zL0 >>929
まだやってない場所どこだっけ?
まだやってない場所どこだっけ?
932デフォルトの名無しさん (ワッチョイ b651-iGo5)
2017/10/07(土) 18:14:41.26ID:7nonADk70 >>927
「別領域を全く使わず」を見落としてたすまぬ
「別領域を全く使わず」を見落としてたすまぬ
933デフォルトの名無しさん (ワッチョイ dae7-XSap)
2017/10/07(土) 18:35:30.53ID:rHfSD+zL0 「別領域を全く使わず」とはいっても、テンポラリの変数を1個とか2個の固定数だけ使うのは除く。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【サッカー】元日本代表DF冨安がオランダ1部アヤックスと大筋合意か 現地メディア報じる [久太郎★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- 【日銀総裁】賃金に上昇圧力 人手不足で労働市場逼迫 [蚤の市★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★7 [七波羅探題★]
- 高市早苗「竹島は日本領土」 [834922174]
- この国がこんなにボロボロになった考えられる原因て何? [605029151]
- 俺は人間国宝
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 【高市悲報】衰退ポルノ、ガチのマジでヤバすぎる…… [784715804]
- 社長「30過ぎて結婚してない人は誰にも選ばれず、長期的な関係も維持できず、家族を守る責任も負わない自己中心的な人間」 [884040186]
