C++相談室 part98
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/08/25(土) 00:46:04.23ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part97
http://toro.2ch.net/test/read.cgi/tech/1343559275/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0153148
2012/09/04(火) 00:17:39.30ありがとうございます。
そうなると、配列を含むクラスのコンストラクタを constexpr にするには他の方法を使わないといけませんね。
0154デフォルトの名無しさん
2012/09/04(火) 04:09:38.27std::array でいいんじゃないの?
0155デフォルトの名無しさん
2012/09/04(火) 13:43:47.09すると10個のファイル転送が終わるまで処理が止まってしまいます。
コピーしろって命令だけ出した状態で直ぐに関数を終わりたいのですが
そのような関数はありますか?CopyFileExというのを見つけましたが
これはコピー中の経過が見えるだけで関数が待つという点で同じみたいです
出来れば別スレッドでコピーを実行とか難しいので非同期にコピーしてくれる関数がしりたいです
よろしくお願いします。
サンプルソース
for(i=0;i<10;i++)
{
CopyFile(src[i], dst[i]); //ここを非同期Copyにすり替えたい
}
0156デフォルトの名無しさん
2012/09/04(火) 13:58:44.05system("hoge.bat");ではいかんのか?
0157デフォルトの名無しさん
2012/09/04(火) 14:01:16.30hogeとか書いてる基地害はさっさと失せろ
お前マジで頭おかしいよ
自覚ないみたいだけど
0158デフォルトの名無しさん
2012/09/04(火) 14:07:14.04hogeだってよwwwww
ヴァカじゃねwwwwwwwwwwwwwww
0159デフォルトの名無しさん
2012/09/04(火) 14:14:09.230160デフォルトの名無しさん
2012/09/04(火) 14:15:40.36素直に別スレッドでやることにします
0161デフォルトの名無しさん
2012/09/04(火) 14:24:29.97Hoge使ってる奴の池沼率は異常に高い。
今回も例外ではなかった。
0162デフォルトの名無しさん
2012/09/04(火) 14:32:34.940163デフォルトの名無しさん
2012/09/04(火) 14:43:07.17hoge使わなくてもcopyfileとかcopyasynchronousとかいくらでもあるだろ
思考停止してんのかこいつ
0164デフォルトの名無しさん
2012/09/04(火) 14:44:43.160166デフォルトの名無しさん
2012/09/04(火) 15:04:47.490167デフォルトの名無しさん
2012/09/04(火) 15:06:39.020168デフォルトの名無しさん
2012/09/04(火) 15:10:23.44hoge厨キメぇ
0169デフォルトの名無しさん
2012/09/04(火) 15:10:58.900170デフォルトの名無しさん
2012/09/04(火) 16:48:23.72>アンタッチャブル
それってむしろスルー力高すぎる奴じゃね? TCG的に考えて
0171デフォルトの名無しさん
2012/09/04(火) 16:52:38.650172デフォルトの名無しさん
2012/09/04(火) 19:55:05.61ユーザーインターフェイスを表示するためにUIOption.AllDialogsを指定し(デフォルトでは表示されない)、
ユーザーがキャンセルしても例外(IOException)をスローしないようにUICancelOption.DoNothingを指定し(デフォルトでは、例外がスローされる)
//参照にMicrosoft.VisualBasic.dllが追加されている必要がある
Microsoft.VisualBasic.FileIO.FileSystem.CopyFile(
"C:\test.txt", "C:\test1.txt",
FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing);
ttp://dobon.net/vb/dotnet/file/filecopy.html
0173デフォルトの名無しさん
2012/09/05(水) 01:00:28.74此処はC++
0174デフォルトの名無しさん
2012/09/05(水) 05:06:25.85ttp://www.crimson-systems.com/tips/t001r.htm
0175デフォルトの名無しさん
2012/09/05(水) 09:28:53.38これで試したら非同期コピーできたよ
簡単だし、途中でキャンセルできたり上書き確認もあったりで至れり尽くせり
0176デフォルトの名無しさん
2012/09/05(水) 23:21:52.92以下のようにReadFileを使うと取得することはできますが、unicode対応
できません(リンクのbuf をwcharにすると文字化けしてしまう)。
http://www.usamimi.info/~hellfather/win32api/API_CreatePipe.xml
unicodeとして取得したい場合どのようにするのが一般的でしょうか?
0177デフォルトの名無しさん
2012/09/05(水) 23:23:17.76ですが、popenは使いません。
CreateProcessを使うやり方でお願いします。
よろしくお願い致します。
0178デフォルトの名無しさん
2012/09/05(水) 23:28:03.37CreateProcessはファイルアクセスには無関係だろ。
単にファイルをunicodeで読み出せばいい。
0179デフォルトの名無しさん
2012/09/05(水) 23:42:40.65え?
知りたいのはc++プログラムから外部のexeを実行して標準出力を取得する方法です。
ファイル開いて中身を読むのではありません。
0180デフォルトの名無しさん
2012/09/06(木) 05:10:29.951.外部exeをUnicode出力するようにする
2.一旦sjisで受け取り、mbtowc()などでUnicodeに変換する
0181デフォルトの名無しさん
2012/09/06(木) 08:26:49.930182デフォルトの名無しさん
2012/09/06(木) 08:33:29.630183デフォルトの名無しさん
2012/09/06(木) 08:43:29.130184デフォルトの名無しさん
2012/09/06(木) 08:57:53.74sjis→Unicodeは問題ないんじゃないかな。実際にやってみないと分からんけど
気をつけるのはsetlocale(LC_CTYPE, "")しとくくらいか
0185デフォルトの名無しさん
2012/09/06(木) 09:43:42.68複数のノードが無向グラフを組むように互いに参照しあっています
外部からどれか一つでも参照されるノードがあればグラフ全体が生きて
全てのノードが参照されなくなったら即メモリなどのリソースを開放しなければなりません
0186デフォルトの名無しさん
2012/09/06(木) 10:27:59.620187デフォルトの名無しさん
2012/09/06(木) 10:38:49.97いろいろ試しましたがうまくいきませんでした
0188デフォルトの名無しさん
2012/09/06(木) 12:23:50.11C++標準のとどう違うのかは知らないけど
0189デフォルトの名無しさん
2012/09/06(木) 12:28:41.52文字コード
ワイド文字
この辺の扱いが難しい
とくにロケーション
0190デフォルトの名無しさん
2012/09/06(木) 15:29:07.85循環参照関連で面倒なら、GCに頼った方がいいんじゃね
アプリ全体の言語変えるのがアレなら
割と高速なGC持ち言語を(Lua, V8/JavaScript)を
組み込んで使うのも手
0191デフォルトの名無しさん
2012/09/06(木) 19:17:39.37wave sign 問題とか minus sign 問題とか
0192デフォルトの名無しさん
2012/09/06(木) 19:29:16.24http://codepad.org/IDIXMH8z
エラーの内容は以下の通りです。
1>Landform.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall GameObject::SetBody(class b2Body *)" (?SetBody@GameObject@@QAEXPAVb2Body@@@Z) が
関数 "public: __thiscall Landform::Landform(class b2Body *,struct b2Color const &)" (??0Landform@@QAE@PAVb2Body@@ABUb2Color@@@Z) で参照されました。
1>C:\workspace\C++\VC++\Practice\Debug\Practice.exe : fatal error LNK1120: 外部参照 1 が未解決です。
Box2D.hはhttp://box2d.org/のものですが、あまり関係ないような気がします。
こちらVC++2008、マルチバイト文字セット使用です。
vc++に強く関わる問題ならそちらのスレで聞きます。
0193デフォルトの名無しさん
2012/09/06(木) 19:43:40.230194デフォルトの名無しさん
2012/09/06(木) 19:47:13.620195デフォルトの名無しさん
2012/09/06(木) 20:01:30.090196デフォルトの名無しさん
2012/09/06(木) 20:11:19.27ライブラリをリンクしてないだけじゃない?
0197デフォルトの名無しさん
2012/09/06(木) 20:22:07.88どのライブラリが必要なのでしょう?
Box2Dならstdafx.hに
#ifdef _DEBUG
#pragma comment(lib, "Box2D_d.lib")
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")
#else
#pragma comment(lib,"Box2D.lib")
#pragma comment(linker, "/NODEFAULTLIB:MSVCRT.lib")
#endif
と記述し、stdafx.hは全てのファイルでインクルードする設定になっています。
GameObject.cppとLandform.cppなら静的ライブラリ化していません。
0198デフォルトの名無しさん
2012/09/06(木) 20:28:55.06stdafx.hの
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib")
をコメントアウトした所リンクに成功しました。
お騒がせしました。
0199デフォルトの名無しさん
2012/09/06(木) 22:10:09.52無ければ自作しますが、今やってる作業はできるだけ中断したくないので、
できれば既存のライブラリを使いたいです。
求めている機能・性能は下記のものです(括弧内は例です)。
・2進数を表現した文字列による初期化(Bits bs("1011001001101"))
・インデックスによる1ビット単位の高速リードアクセス(if (bits[3] == 1) )
この2つが満たされれば、他の機能・性能は特に要りません。
初期化以降リードオンリーでも、リサイズが非効率でもかまいません。
0200デフォルトの名無しさん
2012/09/06(木) 22:16:48.400201デフォルトの名無しさん
2012/09/07(金) 00:01:52.260202デフォルトの名無しさん
2012/09/07(金) 00:07:45.14標準では、無いから自作しな。
0203デフォルトの名無しさん
2012/09/07(金) 00:08:48.24boost::dynamic_bitset
これ以上の物を見た事がない
0204デフォルトの名無しさん
2012/09/07(金) 00:10:11.590205デフォルトの名無しさん
2012/09/07(金) 00:40:59.770206デフォルトの名無しさん
2012/09/07(金) 00:47:17.550207デフォルトの名無しさん
2012/09/07(金) 00:49:59.72http://d.hatena.ne.jp/fjnl/20111206/1323159773
0208199
2012/09/07(金) 07:12:39.15用件を全て満たし、かつ使いやすそうだという事で、
>>203 の boost::dynamic_bitset を採用することにします。
0209デフォルトの名無しさん
2012/09/07(金) 12:11:55.97デリファレンスでコンテナの中身への参照をそのまま返すのではなく
なにか他の型のテンポラリオブジェクトを返すようなイテレーターって
ランダムアクセスできようがなんだろうがカテゴリはoutput_iteratorでいいんですか?
例えば
template <class Proxy> class MyIterator {
std::vector<MyClass>::iterator i_;
public:
Proxy operator * (void) const { return Proxy(*i_); }
// ry
};
std::vector<MyClass> vec;
MyIterator<Hoge> i = vec.begin(), j = vec.end();
while(i != j) {
*i = MyClass(); // コンパイルされるがテンポラリへの代入なので意味ない。あるいは型によってはコンパイルエラー
++i;
}
0210209
2012/09/07(金) 12:15:20.220211デフォルトの名無しさん
2012/09/07(金) 13:37:15.76ランダム可能なら読み専でもrandom_access_iteratorでいいんじゃないの
こういう話もあるし
http://d.hatena.ne.jp/faith_and_brave/20100305/1267779325
>直交した2つの問題(横断と、値へのアクセス)を扱う場合、単一の階層構造しか持っていない
>標準のイテレータコンセプトとその要件には欠陥がある。
0212デフォルトの名無しさん
2012/09/07(金) 17:43:25.840213デフォルトの名無しさん
2012/09/07(金) 17:45:15.860214デフォルトの名無しさん
2012/09/07(金) 17:46:10.330215デフォルトの名無しさん
2012/09/07(金) 17:51:18.890216デフォルトの名無しさん
2012/09/07(金) 18:08:43.560217デフォルトの名無しさん
2012/09/07(金) 18:11:53.21なるほど
もしやと思ってたんですがやっぱり標準に問題があったんですね
0219デフォルトの名無しさん
2012/09/07(金) 18:51:47.80重要やで
0220デフォルトの名無しさん
2012/09/07(金) 18:53:28.510221デフォルトの名無しさん
2012/09/07(金) 19:46:12.05可能性はある。
実装はともかく。
0222デフォルトの名無しさん
2012/09/07(金) 19:50:33.71kwskwktk
0223デフォルトの名無しさん
2012/09/07(金) 20:15:10.30class という文字のところに波線が表示されて、次のエラーメッセージが出た。
(エラー一覧ウィンドウに警告ではなくエラーとして表示された)
「Intellisense: PCH 警告: ヘッダーの停止はマクロまたは #if ブロックには配置できません。
Intellisense PCH ファイルは生成されませんでした。」
後半の Intellisense PCH ってのはよく分からんけど、
たぶんそんなファイルは必要ないだろうから、どうでも良い。
(今まで使った記憶が無い)
ただ、前半のヘッダーの停止の意味がよく分からない。
ヘッダーの停止って何? 停止も何も、初めから動かないと思うが。
ヘッダーって内部的には、コンパイル時に #include <...> が
ヘッダーファイル内の文字列に置換されるだけなんじゃないの?
書いたコードは次のもの。
#ifndef TEST_H
#define TEST_H
class Container
{};
#endif
たったこれだけ。
0224デフォルトの名無しさん
2012/09/07(金) 20:20:06.62RAIIの意味が理解できないロートル乙
0225デフォルトの名無しさん
2012/09/07(金) 20:39:04.55Hogeとか使ってる精神異常は失せろ
ゴミが
0226デフォルトの名無しさん
2012/09/07(金) 20:53:43.730227デフォルトの名無しさん
2012/09/07(金) 21:01:21.37インクルードしてる側のコードも晒して。
0228デフォルトの名無しさん
2012/09/07(金) 21:02:10.440229デフォルトの名無しさん
2012/09/07(金) 21:25:14.900230デフォルトの名無しさん
2012/09/07(金) 21:25:17.14いや、まだどこにもインクルードされていない。
Win32 コンソールアプリのプロジェクトを新規作成して、
test.h ファイルを新規作成して、>>223 のコードを書いたらこうなった。
(正確に言えば、コードにはもう少し空行があるが、ここに載せるために縮めた)
ちなみに、#ifndef #endif のペアじゃなく、#pragma once を使ったら、
このエラーは発生しなかった。
じゃあ #pragma once でいいじゃんと言うことだが、納得いかない。
0231デフォルトの名無しさん
2012/09/07(金) 21:39:43.73デストラクタ否定派ですか?
0232デフォルトの名無しさん
2012/09/07(金) 22:14:35.42初期化と代入はいくら区別してもしすぎることはないんじゃわー
一般にaへのbの代入は初期化済みのaが存在するからこそ成立するし、
aが保持するリソースの適切な処置(開放等)を伴う
究極的には初期化が無ければプログラミングは成立しないが
代入は無くてもプログラミングが成立し得るという違いがある
0233デフォルトの名無しさん
2012/09/07(金) 22:19:25.81ヒント: stdafx.h
0234デフォルトの名無しさん
2012/09/07(金) 22:24:42.82私のプロジェクトには stdafx.h などというファイルは存在しないが、
stdafx.h を作れという意味?
0235デフォルトの名無しさん
2012/09/07(金) 22:37:12.95ある関数が呼び出されたとき、その関数を呼び出したのが「誰」かによって
動作を変更することは可能でしょうか?
0236デフォルトの名無しさん
2012/09/07(金) 22:38:42.280237デフォルトの名無しさん
2012/09/07(金) 22:40:58.78>代入は無くてもプログラミングが成立し得る
関数型の考え方ですね。いまちょっと苦闘中‥‥
呼び出し先Aにしてほしいことをサブ関数にまとめて、そのサブ関数のポインタを呼び出し先Aに渡す、というのはよくみる光景かと。
0240デフォルトの名無しさん
2012/09/07(金) 22:57:46.46なる
0241デフォルトの名無しさん
2012/09/07(金) 23:02:08.98メモリマップド I/O をどうやって成立させるんだよ
アセンブラに逃げるという答えは聞こえねえぞ
I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
代入の変形でしかない初期化だけで満足してるようならおめでたいぜ
0242デフォルトの名無しさん
2012/09/07(金) 23:51:07.82外界は移ろい行く世界であるから破壊的代入の世界なんじゃわー
したがって、I/Oまで非破壊的代入で通すことはとうぜん無理が大きい
しかしそんなことはプログラミングする上では瑣末な事柄であって
代入を含むアルゴリズムが皆初期化だけでも書けることが重要なんじゃわー
代入のかわりに初期化を使うと何がうれしいかと言うと、マルチスレッドがメチャ安全に実現できる
0243デフォルトの名無しさん
2012/09/08(土) 00:00:54.31>I/O でなくてもメモリそのものへのアクセスサイクルすら同じことで
チューリングマシンはチューリングマシンを模倣する能力があり、
かつチューリングマシンとチャーチのモデルは等価なんじゃわー
したがってプログラミングする上ではどっちでもおk
外界やメモリや無限の長さの磁気テープが破壊的代入の産物であることは
事実ではあるが、漏れが初期化だけで満足することを全く妨げない
0244デフォルトの名無しさん
2012/09/08(土) 00:02:01.18operator new ですら初期化だけでは無理なのに
0245デフォルトの名無しさん
2012/09/08(土) 00:03:52.83一ヶ月ぶりに来たけど、まだあって安心した。
0246デフォルトの名無しさん
2012/09/08(土) 00:21:47.79例えば
template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };
これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。
つまり、
typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー
このようになってほしいです。
できるでしょうか。
0247デフォルトの名無しさん
2012/09/08(土) 00:25:07.26そんなことは知らんが(普通はTCBなしくみの上に非破壊代入のみの世界を作る・・・(1)
書こうと思えば書けるまずTCBはつまるところタスク間の同期管理のしくみである同期しなくて良いなら
単にシングルスレッドなプログラムがタスクの本数分、ということでタスクの初期化(生成)だけで済むことは自明
で、破壊的代入なプログラミングで書かれたタスクA、Bの同期というのはAとBの状態が揃ったとき
先に進むということに他ならない
そうした言語では1行1行の実行が無限長の磁気テープか有限状態制御部の状態遷移を伴うからである
これの非破壊代入版への単純な翻訳ではそれが全てタスクの部分に相当するプログラムの新規生成となる
生成に要する引数が揃わねば次のプログラムを生成できないのであるから、理論上そこで同期せざるを得ない
(まあ徹底的に非破壊代入にそろえるとこうなってしまい、マルチスレッドの概念からして覆ってしまう
>242の最後の行はここまですることは意図していない(1)のケースにおけるメリットを述べたもの
0248デフォルトの名無しさん
2012/09/08(土) 00:25:44.620249デフォルトの名無しさん
2012/09/08(土) 00:29:56.25unko& unko::operator = (unko&&) const { return *this; }
0250デフォルトの名無しさん
2012/09/08(土) 00:38:00.28どのように記述すれば良いのでしょうか。
0251デフォルトの名無しさん
2012/09/08(土) 00:47:15.31質問に答えが返ってきてから後出し質問するなよゴミ
どんな教育受けてきだんだ
お前の親はマジで人間のクズだな
0252デフォルトの名無しさん
2012/09/08(土) 00:55:39.60クズ呼ばわりされては親に申し訳ないので新規に質問します。
>>246 は忘れてくださるとありがたいです。
テンプレート引数を特定のクラステンプレートに制限する方法が知りたいです。
例えば
template <int N> class A { ・・・ };
template <typemane T> class B { ・・・ };
これで、クラステンプレートBのテンプレート引数に設定できる型を
クラステンプレートAの実体化された型に限りたいです。
つまり、
typedef A<3> a;
typedef B<a> b; // ok
typedef B<char> b2; // コンパイルエラー
このようになってほしいです。
記述方法を教えていただけないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています