- 1 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 04:55:24.99 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part94 toro.2ch.net/test/read.cgi/tech/1329512856/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.78【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1331894668/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
- 751 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:01:30.60 ]
- >コンパイル時に確定
・#defineで自分で連番化 ・ユーザー定義リテラル(C++11) ・GNU gettext
- 752 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:01:57.34 ]
- ユニークなIDが欲しいのはいいとして文字列にこだわる理由が分からん…
マクロでも列挙でも定義すればいいと思うのだが… 自分は壮大な勘違いをしているのかな?
- 753 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:39:19.12 ]
- 文字列のペアとアドレスの対応表を作れ
- 754 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:48:20.74 ]
- >>749
文字列そのものが動的に変化する性質のものなのになぜユニークなIDが?
- 755 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:54:40.28 ]
- .NETならSHA1CryptoServiceProviderを使えば簡単に生成できるから
stringとSHA1のstructをコレクションに突っ込んでおればいいしな
- 756 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:57:07.63 ]
- 皆様レスありがとうございます。
>>750,753 はじめはmapで実装を行っていたのですが、文字列ですのでどうしても検索速度が気になって・・。 >>751,750 やはりマクロか列挙型しかないですか・・・。 実は実行時コンパイルの必要なGLSLのプログラムクラスを作りたいと思っています。 本来ならば以下のようにすれば特に問題ないのですが class Hoge { public: Hoge(){prog.init("foo.vert","bar.frag");} void run() { prog.bind(); ○○何らかの処理○○ prog.unbind(); } private: GLSLProgram prog; }; prog自体はrunの中でしか呼び出さないためメンバ変数として保持するほどでもないので 出来れば以下のようにしたいなと考えています。 void run() { prog("foo.vert","bar.frag");//コンストラクタ、デストラクタでbind,unbindを行う } ただ、prog("foo.vert","bar.frag")自体はほかのクラスでも使うときがあるかもしれないので、 "あるペアに対する実体は一つ"のクラスを作りたい、と考えています。
- 757 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:58:16.34 ]
- ハッシュはユニークじゃなくね
実用上ユニークと考えて差し支えは無いかもしれないけど
- 758 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:04:18.81 ]
- メモリを自動的に確保したら
intを作る必要なんかないのでは?
- 759 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:05:23.41 ]
- 多分2倍程度しか早くならないけどhash_mapっていうハッシュ使うマップもあるよ
あとはハッシュ関数自前で作ってaとbの命名を被らないように特徴づけるとかすればいいんじゃないの?
- 760 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:08:28.50 ]
- >>757
衝突する確率はゼロじゃないわな でも文字列も同一文字列である可能性もあるわけで
- 761 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:23:11.70 ]
- void Hoge::run(){
static id = id_from_map("foo.vert", "bar.frag"); GLSLProgram prog(id); }
- 762 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 19:02:57.58 ]
- >>756
ideone.com/B4Sri cache find, new glsl_bodyは2回、bind,unbindは4回 文字列での検索は関数毎に1回だけ コンパイル時じゃないけど初回くらいいいだろうということで
- 763 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:06:36.71 ]
- 無料ではじめたい、無料でソフトつくりたい・・・はやっぱり贅沢すぎるか・・・
- 764 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:24:01.97 ]
- PCと電気代、通信費以外は無料でプログラム作れるぞ?
回線も一昔前のISDN時代とは違うしな。
- 765 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:46:02.09 ]
- PCもネットも無料で使える図書館的なものが欲しいって話かと思った
- 766 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:47:27.45 ]
- Visual Studio の無料版なくなったってよ
- 767 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:48:51.21 ]
- 情弱乙
- 768 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:53:15.51 ]
- 提供されないよ!って大風呂敷広げた記事が数日で訂正されてたのには笑った
- 769 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 22:59:02.78 ]
- 仮にVSなくなろうとPlatform SDKかWindows SDKもしくは、gcc使えば済むしな
お勉強したいだけなら、cintやcodepad使う手もある
- 770 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:01:54.02 ]
- テキストに「ド、レ、ミ」と入力してMIDIファイルを書き出すソフトって難しそうだ
- 771 名前:デフォルトの名無しさん [2012/06/13(水) 23:07:47.88 ]
- 一応ここでいいかな?
mp3だとかwavみたいな音楽ファイルから、 タイトルとかアルバム名を取れるライブラリってないかな?
- 772 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:19:17.89 ]
- mp3infp
- 773 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:35:31.84 ]
- >>772
ありがとう。 とりあえずこのプログラムから解析してる部分の抜き出しをがんばってみる。
- 774 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:36:17.30 ]
- テンプレート関数の事なのですが、
戻り値が引数と同じ型で、 かつ特殊化をするコードを教えていただけませんでしょうか。 C#でのコードだと↓です public T getObject<T>() where : Hoge { ~~~~~~ ~~~~~~ return T; }
- 775 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:43:01.91 ]
- 引数ないじゃん
- 776 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:45:50.36 ]
- すみません説明不十分でしたorz
テンプレート引数です。
- 777 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:48:22.98 ]
- template <> Hoge getObject() { /* */ }
特に悩むところもないと思うけど
- 778 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 23:57:26.61 ]
- >>756
究極的には文字列を分解して一文字ずつテンプレートに渡す方法だな template<char C1, char C2 ・・・ > hoge; hoge<'f', 'o', 'o'> h; 11ならconstexprと組み合わせて文字列から↑まで持っていくのも不可能ではなさそうなんだが実際できるのかな?
- 779 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:05:36.70 ]
- boost::mpl::stringみたいな魔境に近づくのはやめようぜ
- 780 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:09:44.66 ]
- >>777
それはちょっと違うと思う 特定の型から派生されているかの制約を持たせたいなら メタプロでなんとかなると思われ C++11 なら std::is_base_of ってのがあるが C++11 でなくても真似すればいいと思う
- 781 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:19:00.62 ]
- >>744
list< shared_ptr<double> >
- 782 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:20:07.66 ]
- >>777
すみません。また説明不足でした。すみません。 >>778 関数の処理結果に応じて戻り値の型を変える事ができるのでしょうか?勉強不足ですみません。 説明不足で申し訳ありません。 ↓のような場合の時でテンプレート引数がHogeの派生クラスになるように制約をかけたいです。 class Hoge() { public T getObject<T>() where T : Hoge() { ~~~~ ~~~~ return T; } } class Poge() : public Hoge { } class Foge() : public Hoge { } >>780 メタプロでぐぐってみます。
- 783 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:22:39.49 ]
- boostにis_base_ofがあるな
BOOST_STATIC_ASSERTと組み合わせて使えばいいはず
- 784 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:25:59.51 ]
- template <typename T> typename std::enable_if<std::is_base_of<Hoge, T>::value, T>::type getObject(){return T();};
こうだろ
- 785 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:28:09.48 ]
- enabled_ifはキモいなあ
今回はたまたま戻り値の型でしかTが使われてないけど 2箇所以上で使われている場合に 1箇所だけenabled_ifってのも何かバランス悪いし
- 786 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:28:38.38 ]
- enable_ifだよ
ミスったよ
- 787 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:41:45.51 ]
- boostなんて実用はありない
あんなのヲタが使うもの ソースが汚くいことこの上ない
- 788 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:47:04.52 ]
- 自分が使いこなせないからってライブラリのせいにする人はちょっと…
- 789 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:53:53.73 ]
- >>784
今さっきなんとなくわかりました。長いのは戻り値だったんですねー… Boostをインストールしてみて、 きびしそうなら別の方法を執ってみます。 みなさんわざわざありがとうございました。
- 790 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 00:56:23.34 ]
- >>788
使いこなせないとどこに書いてあるんだ? 脳内補完もここまで来ると感服だなw
- 791 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 02:38:33.34 ]
- STLにTree構造データないのは何故だ
- 792 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 03:04:06.37 ]
- Setは?
- 793 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 04:11:05.53 ]
- ありない
ありない ありない 汚くい 汚くい 汚くい
- 794 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 06:05:26.57 ]
- >>780
そんな事するんだったらconst定数使った方がましじゃね? template<const char *array> class Example; namespace Keys { const char alpha[] = "Alpha"; const char beta[] = "Alpha"; } Example< Keys::alpha > object; >>782 template<class type> type Example::Function() { type value; ExampleBase *base_check = &value; // 親子関係がなければコンパイルエラー return value; }
- 795 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 06:27:38.53 ]
- >>791
map, set, priority_qeueは内部的にtree使ってる std::make_heapを使えば自前の二分木を楽に作れる
- 796 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 08:43:30.62 ]
- class Object {};
class User { public: User(std::shared_ptr<Object> o = std::make_shared<Object>()) : o_(o) };
- 797 名前:796 mailto:sage [2012/06/14(木) 08:45:31.56 ]
- すみません、記述途中で投稿してしまいました。
デフォルト引数にstd::make_shared〜とやると、make_sharedがglobal namespaceのメンバーでないとエラーが出てしまいます。 当然、using namespace std;を行うと、正しくコンパイルできるのですが、それはしたくありません。 どのように記述するのが正しいのでしょうか?
- 798 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 09:24:56.76 ]
- VC++が悪い
- 799 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 10:06:41.32 ]
- そのコンストラクタはデフォルト引数の指定無しにして引数なしのコンストラクタも書けばいいじゃないか
- 800 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 11:35:13.06 ]
- こんなのはどう?
User(std::shared_ptr<Object> o = [](){return std::make_shared<Object>();}()) : o_(o) {}
- 801 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 11:44:08.99 ]
- >>769
そもそも勉強用にMSVC使うってのが間違ってるだろ。 LLVM/clang使えばいろいろ捗るぞ。ここまで無料で高品質でライセンスの緩いコンパイラは珍しいし他にない。 本来ならば金の要らないLinux前提だしmingw入れればwindowsでも動くしな。
- 802 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 11:54:10.94 ]
- Linux前提やクロス開発を考慮する場合はともかく
Windows前提ならmingw選ぶのは間違ってる
- 803 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 12:40:59.56 ]
- windows使ってるならcygwin入れろ。
ファイル消せなくなって困るぞ。
- 804 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 12:45:48.23 ]
- 問題なのはcygwinを入れないとファイルが消せなくなるんじゃなくて
cygwinを入れたせいでファイルを消せなくなる点なんだよな。
- 805 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 12:49:49.76 ]
- Windows前提をはずすのが一番って尊師が言ってた
- 806 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 13:30:06.78 ]
- そりゃあ尊師はUNIXライク前提ですから
- 807 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 13:52:33.44 ]
- cygwin()
- 808 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 16:22:24.28 ]
- マハーポーシャでPC組んでLinux入れよう
- 809 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 18:03:24.84 ]
- LinuxはTagジャンプをなんとかしろ
global.elとか仕様頻繁に換えんな
- 810 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 18:28:20.78 ]
- カーネル開発者や鳥のメンテナにEmacsの文句言うのかー
- 811 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:22:16.79 ]
- C++で、外部の.exeファイルを実行するにはどうすればいいですか?
使っているソフトはVS2010です
- 812 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:30:59.40 ]
- >>811
【初心者歓迎】C/C++室 Ver.78【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1331894668/l50
- 813 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:39:57.21 ]
- 環境依存でないsystemがあるじゃないかー
(使い方はある程度環境に依存はするけど)
- 814 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:41:19.39 ]
- #include <cstdlib>
int std::system(const char*); のことかな。
- 815 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 20:37:55.88 ]
- >>811
単に実行するならexecとか 標準入出力の内容を操作したいならpopen/_popenを使ふ
- 816 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 22:05:13.07 ]
- そんな環境依存の事を言われても・・・
- 817 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:09:00.46 ]
- popenか_popenどっちも持ってないなんて組み込み環境ぐらいだろ
- 818 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:24:09.16 ]
- 規格に無いものは開発環境ごとのスレでやった方がいい
- 819 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:26:06.03 ]
- POSIXぐらい、半標準なんだからいいだろうに
標準ライブラリなんて元々POSIXのサブセットだぞ
- 820 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:35:30.41 ]
- pthreadsもここでやるのか?とか
あまり手広く広げてもなあ
- 821 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 22:49:13.90 ]
- posix名前空間が用意されたとはいえ
現状std名前空間にあるC関数もあんまり積極的には扱ってないだろ
- 822 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 23:06:35.34 ]
- C関数でないと無理なものはまあ扱わなくもない
|

|