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


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

C++相談室 part95



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/

592 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 14:22:16.98 ]
Cabc(Cbdf*);

これは
Cabc(int*)
って書いてるようなものだ
Cabc(Cbdf* hoge);
とすれば消える

593 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 14:36:17.77 ]
Cabc(きゃびっく?)ってなんよ?

594 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 14:44:26.79 ]
>>591
きゃびっく型が事前に宣言してないきゃぶどふ型使ってるからだろ
きゃびっくの前に、class Cbdf;と書いとくか、Cbdf *bdfaddr;を
class Cbdf *bdfaddrと書けば行けるはずだ。
ただ、よっぽどの事情が無い限りクラス同士を循環参照すべきじゃない。
オブジェクト同士の循環参照は構わないが、その場合、抽象クラスなどを
用いてクラス定義では単一参照にする。

595 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 14:45:17.51 ]
>>593
Class ABC じゃね?

596 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 14:49:01.51 ]
プリフィクスはヤメロと・・・

597 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:01:37.39 ]
>>592
なるほど・・・
宣言時は省略できるもんだと思ってました

598 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:02:43.71 ]
>>596
便利じゃないですかー

599 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:11:23.54 ]
何に使うんだよ・・・
(今やプリフィクス禁止が基本なのに)

600 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:22:11.28 ]
今やというか、昔から禿はプリフィクス付けんなと言っているけどな
代わりに名前空間使えや



601 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:23:27.27 ]
>>597
いや、省略できるよ。そこは問題ない。問題は循環参照。

602 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:25:32.98 ]
これからはフィリックスの時代

603 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:51:11.79 ]
>>602
懐かしいな。黒い猫だろ。

604 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 15:59:12.44 ]
プラスネジじゃないの?

605 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 19:44:49.39 ]
>>591そのままのソースならnew Cabc(this)の後ろに;がないのが間違いだが

606 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 20:03:46.47 ]
>>601
ポインタの場合具体的な変数名を記入すれば回避できるという話では無いんですか?
それにしてもfunc(int*)という宣言は出来たような気がしますけど・・・

607 名前:592 mailto:sage [2012/06/03(日) 20:05:20.92 ]
592はただの知ったかだから無視すればいい

608 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 20:08:14.92 ]
えーと、じゃあ>>591のソースコードで出るエラーは>>605ぐらいしかなく、
とりあえず他のエラー要因は無いということですか?

609 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 20:23:15.28 ]
>>608
だから循環参照が原因だっつってんじゃねぇかハゲっ

610 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 21:08:37.12 ]
>>608
両方ポインタなら回避できると聞いたんですけど、違うんですか?



611 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 21:15:31.14 ]
ポインタでもCbdfが何かは書かないとわからない。class Cbdf;みたいに


612 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 21:41:55.41 ]
> とりあえず他のエラー要因は無いということですか?
既出のように>>591の適切な場所にCbdfの宣言と;を追加すればとりあえずコンパイルは通る
が、意図したように動くか?

613 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 22:30:35.03 ]
>>612
設計の話になってしまうのですが
マネージャークラスが保持する任意のクラスから、
同じくマネージャークラスが保持する他の任意のクラスにアクセスしたいんです。

ファイルの階層構造みたいな感じで、例えばwindowsの
Program FilesフォルダからWindowsフォルダにアクセスするときローカルディスクC:に戻るみたいな設計です。
C++風に書くと
LocalDiscAddress->GetWindowsAddr()->hoge

でも中々に読みづらい(´・ω・`)

614 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 23:43:59.83 ]
メモリポインタを使うと動くよ

615 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 00:21:22.68 ]
親クラス 子クラスがあります
親 hoge = new 子1
親 hoge = new 子2
みたいな感じで1つのオブジェクトで親と子の2クラスを両方扱いたいんです。

これは可能で、キャストすれば子独自のメソッドも使用可能なのはわかるんですが。

今親クラスのオブジェクトの宣言を std::auto_ptr で行なっているため、キャストが上手くいきません。
解決法としては、std::auto_ptr を辞めるしかないんでしょうか?他にいい方法がありましたら、
ご教授お願いします。



616 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 00:22:55.89 ]
std::auto_ptrはそれ無理です
std::unique_ptr使ってください

617 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:25:07.50 ]
>>615
auto_ptr でも static_cast<子1&>(*p) すりゃ何の問題も無いだろう。
何か他に制約があるようならコード晒せ。

618 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:36:00.60 ]
ダウンキャストするぐらいなら最初から子のauto_ptr使えよ

619 名前:615 mailto:sage [2012/06/04(月) 01:36:05.78 ]
dynamic_cast ではなく static_cast を使うんですか?
これは思いつきませんでした。ありがとうございます。

620 名前:615 mailto:sage [2012/06/04(月) 01:42:13.45 ]
初めは子の auto_ptr を使っていたんですが、コーディングが冗漫になったので
ダウンキャストしようかと。




621 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:46:09.88 ]
だったら親と子の型2つのスマポを用意して
同じオブジェクトを参照させるべき
auto_ptrじゃ使えねぇからshared_ptr使うことになるけどね

622 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 02:24:53.64 ]
>>619
型を自分で保証できるなら static_cast でいい。

623 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 02:25:16.25 ]
>>621
それはないわ。

624 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 05:39:45.46 ]
安易なダウンキャストは止めたほうがいい
根底と、派生2つのポインターで管理してる場合は、
派生クラスを差し替えた際、派生のポインターで
コンパイルエラーを引き起こせる。根底のポインターを
1個使い回しダウンキャストする方法だと、
派生を交換しても実行時になるまで、キャストミスに
よるエラーが解らない。関数スコープならそこまで
面倒じゃないが、クラススコープだと問題特定が面倒になる。

625 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:07:32.40 ]
UNIX系で C++ 勉強してて最近 Visual C++ 2010 はじめたばかりなんですけど
Visual C++ で時刻を取得するにはどうしたらいいんでしょうか

time.h インクルードしても
time_t time;
は宣言できるんですが
time(&time);
でエラーになります

レベルの低い質問ですいません…

626 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:15:56.30 ]
エラーの内容を書けと

627 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:18:53.48 ]
すいません><

式には(pointer-to0)関数型が必要です

っていうエラーがでます

628 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:25:16.64 ]
うわあ はずかしい
ごめんなさい 自己解決しました

time_t t;
time(&t);

にしたらとおりました
C++は関数と変数で名前空間かぶっちゃだめなんですね
授業でならうの Java が多いのでので知りませんでした
おさわがせしました><

629 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:28:28.59 ]
一定時間ごとにメッセージボックスを表示するだけのプログラムを作ったんですけど
メッセージボックスが表示されてないときにプログラム終了するには
タスクマネージャーからきるしかないんでしょうか…
好きなときに終了できるようにするにはどうするのがスマートなんでしょうか…

#include <windows.h>
#include <time.h>

#define INTERVAL 60

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
time_t prev = (time(NULL) + 300) / 1800;

while(1) {
time_t now = (time(NULL) + 300) / 1800;
if(now != prev) {
MessageBox(NULL, TEXT("時間で〜す"), TEXT("時間で〜す"), MB_OK | MB_TOPMOST | MB_SETFOREGROUND);
prev = now;
}

Sleep(INTERVAL * 1000);
}
}

630 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:33:59.01 ]
>>629
例えば「好きなとき」をキー入力で伝えることにすれば、てきとうな API でキー入力でも監視すればいいだろう。
心を読んで欲しいということならたぶん無理だ。



631 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:43:08.60 ]
あ〜 説明不足でごめんなさい

できればキーじゃなくて直感的に分かりやすい操作で終了dけいるようにしたいんですけど

たとえば常にベースパネルだけ表示させてそこに終了ボタンつけるとか…
下のタスクバーに表示させて右クリック終了みたいにできるとか…
って簡単にできますか?

なにぶん GUI プログラミング初心者なもので…

632 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:59:34.74 ]
Shell_NotifyIconでgoogle

633 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 10:05:46.32 ]
あ まさにやりことこれでした!
なんか難しそうですけどがんばってよんでみます!
ほんとにありがとうございました!


634 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 10:12:32.33 ]
>>629
今度からは環境を明記の上、環境依存OKのスレに書いてね。

635 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 17:47:30.54 ]
カンマで並列関係にある引数、(a1,a2)や(a,b)の順序が
固定されないのはいいけど
a1,a2,b1,a,b のように並列関係を超えて順序が未規定なのは何でだろう
これのせいで
f(std::unique_ptr<A>(new A()), std::unique_ptr<B>(new B()));
が危険なコードになってしまう

C++11で直せばよかったのに
どうせCと完全互換でないんだから例外に絡むところまで合わせる必要ないのに

636 名前:635 mailto:sage [2012/06/05(火) 17:49:38.33 ]
1行目消しちゃった

f(a(a1(), a2()), b(b1())));

637 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:13:51.16 ]
>>635
評価順序の話か?
その危険なコードとやらがどう危険なんだ?

638 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:33:33.75 ]
>>637
new A()実行後にunique_ptrに渡される前にnew B()が呼ばれ
Bのコンストラクタが例外を出すとAは解放されない
並列関係を超えない場合はnew A()の結果が必ずunique_ptrに渡されるので、
その後Bが例外を出してもunique_ptrのデストラクタで例外安全は保たれる

↓はshared_ptrでの例、C++11/unique_ptrでも同様
www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm
>Avoid using unnamed shared_ptr temporaries to save typing; to see why this is dangerous
>void bad()
>{
>  f(shared_ptr<int>(new int(2)), g());
>}

関数の引数で無名スマポを作ってはいけないという話

639 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:01:42.25 ]
一応引数内でもラムダ使えば評価順序をブロック化出来るか
流石にやんないけど
f([&](){return std::unique_ptr<A>(new A());}(), [&](){return std::unique_ptr<A>(new A());}());
ideone.com/hJh8q

640 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:06:10.81 ]
>>636
引数の評価順が固定されない方が最適化が楽な処理系があるからに決まってるじゃん



641 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:16:38.14 ]
>>640
それと引き換えにスマポを一時オブジェクトにすることで可能な最適化が出来なくなってる

あと評価順の固定とまでは言ってない、並列関係を越えないことの保証と言ってる
f(a(), b(d()), c())がb,c,aという順でもいいけど、
dとbの間にa,cが入らないのを保証して欲しいということ
その制限でも出来なくなる最適化はあるだろうけどさ、トレードオフに見合うかは疑問

642 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:37:01.40 ]
>>640
stdcallとcdeclじゃ引数の積み方が逆だし
今更固定にできないよな

643 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:51:49.09 ]
>>641
スマポはtemplateが入ってきてからboostから入れられた概念だろ
それに対し引数の評価順はC時代から規定されていない
スマポがC++98/2003にもう入っていたら規定されてたかもね

他にも&&や||のオーバーロードも短絡評価ではなく全部評価してしまう
という元の演算子とは異なる挙動を見せるなど問題点は一杯あるだろ
More Effective C++に書いてあるけど

644 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:55:17.19 ]
てか便利な仕様だな
コンパイラーベンダーは、引数で時間のかかる処理呼ばれたら
スレッド化する最適化とかすりゃいいのに

645 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:03:14.06 ]
でも並列化で早くなるかどうかは環境次第だしなあ
1コアで並列化しても意味が無いし

646 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:06:49.51 ]
アーキティクチャー指定でいいんじゃね
今でもSSEなんてそうだし

647 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:28:25.32 ]
数値と文字列で比較はできても結合できる必要は無いな
既に似たような仕組みがあるし

648 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:28:43.05 ]
誤爆した・・・

649 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:31:12.76 ]
似てるからね

650 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:32:15.39 ]
どこのを誤爆したかすぐにわかってしまったw



651 名前:デフォルトの名無しさん [2012/06/05(火) 22:23:05.31 ]
このスレいつからC++11板に・・・(笑

現実的に考えて日本語版Effective C++11が出るくらいまで
(2年後くらい?)はC++11普及しない気がする。
もっと悲観的な見方をすれば、爆発的な機能増強のせいで、
C++03に対するC言語ユーザの認識程度にしか広まらなかったりして。
「あ〜C++11ね、コンパイラは使ってるけどね」
そのへんどう考えてるの>偉い人

652 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:59:59.19 ]
C++11板とか単一言語しか許されない板怖すぎる

653 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 14:45:53.32 ]
C++11はC++の一方言だ

654 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 10:09:46.63 ]
>>652
auto_ptrは板違いとか言われそうw

655 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:46:47.32 ]
まだ規格から消えてないから大丈夫

656 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:07:08.62 ]
でもdepricatedなんだろ

657 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:28:46.06 ]
exportに比べればマシな扱いさ

658 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:33:27.84 ]
const auto_ptrなら残してもいいと思う

659 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 16:01:44.79 ]
const auto_ptrは感動した

660 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:08:17.52 ]
別にunique_ptrでええやん



661 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:37:16.62 ]
だってまだ無かったりtr1だったりする環境が・・・

662 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:40:21.33 ]
boostに03で動くのなかったか
使ったことないからどんなできかは知らんが

663 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 21:38:15.30 ]
LPCTSTRも仲間に入れてあげて

664 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 21:41:46.55 ]
>>662
C++11のものと同じような使い勝手だと思うとモニターに右ストレート叩き込みたくなるレベル

665 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 22:58:15.54 ]
C++11が使えないならboost::scoped_ptrを使えばいいじゃない

666 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:11:55.09 ]
boostで日本提供のライブラリって多いよな
日本優秀だな

667 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:12:53.39 ]
たとえば?

668 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:14:28.80 ]
boost::sinobi
boost::geisha
boost::shogun

669 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 03:27:19.55 ]
boost::harakiri

670 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 03:59:45.65 ]
boost::fukushima
このライブラリは日本の優秀さをみごとに示している



671 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 04:21:40.19 ]
え?これってマジ?なわけないか

672 名前:デフォルトの名無しさん [2012/06/09(土) 22:08:27.44 ]
最近アクセスしたデータを高速に取出し、
アクセス頻度の低いデータをちゃっちゃと
削除する(所謂キャッシュ)のに、適した
STLコンテナーの組み合わせってなんだろうか?
大量の配列からデータを検索するんだが、
その検索速度よりは、速くしたい。

673 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:23:21.20 ]
priority_queueとか

674 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:30:55.99 ]
言ってる事はLRUアルゴリズムの事だと思うんだけどこれをSTLでするにはなあ

LRU STL でぐぐってみたら?

675 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:49:25.47 ]
>>672
こんなのは?

timday.bitbucket.org/lru.html

676 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:07:32.88 ]
>>675
商用なんで、そんな得体の知れない、何の保障もないものは使えないんですよ

677 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:12:42.90 ]
スプレー木自作コースだな
バグ多発のヨカーン

678 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:14:14.01 ]
>>676
2chで金取るような質問すんなよ
そこまで言うなら自分で考えな

679 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:21:08.76 ]
スプレー木 Boost にあるじゃん

680 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:21:59.97 ]
>>679
商用なんで、そんな得体の知れない、何の保障もないものは使えないんですよ



681 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:22:45.47 ]
>>675
ありがとうございます。もっと詳しく調べてみようと思いますが
キャッシュ管理コスト自体が重そうですね・・・

682 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:24:13.85 ]
dllが複数のアップリケーションから読み込んで使われるとして、そのdllの別々のインスタンスに共通のデータを持たせる方法はありますか?
具体的には、読み込まれたdllのインスタンスが自分が何番目のdllインスタンスなのかを知ることができるかどうかなのですが
HD書き込みよりも直接的な方法で

683 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:26:56.11 ]
共有メモリ

684 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:30:58.11 ]
>>682
templateのinstanceは共有できんぞ
単に変数とか記憶領域の事をいってんならMemory-Mappedか、
data_segをつかう↓。ただし処理系依存だし、addressも制御できんから
特別事情がない限りMemory-Mappedを使うべき
msdn.microsoft.com/ja-jp/library/h90dkhs0(v=vs.80).aspx

685 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:31:33.01 ]
>>683
ありがとうございます、ググっていけばなんとかなりそうな雰囲気がつかめました
これって言語レベルで使えるものなんですかね?

686 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:40:59.55 ]
>>684
更にありがとうございます
チラッとし食べてみた感じ言語レベルで使えそうですね、ありがたい

687 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:44:43.61 ]
class nekoあったとして
下記をやるために用意しなければいけないnekoのメソッドって何ですか?
const char* koe = "wan";
neko pochi = neko(koe);

688 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:46:02.33 ]
メモリポインタ

689 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:46:56.73 ]
C++は関数はあってもObjective-Cの様にメッセージの対になるメソッドは持っていない

690 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 03:01:36.67 ]
C++11じゃない場合は
is_rvalueで条件文分岐するのは無理なのでしょうか
boostの中にもis_rvalueないみたいですし

例えばこんなことしたい

template<T>
struct glue
{
T & value
glue(T & v):value(v) {}
};

template<>
struct glue<rvalue<float> >
{
float value;
glue(float v):value(v) {}
};


float f=10.2;

glue<float> g1(f);
glue<rvalue<float>> g1(2.3);







691 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 03:58:06.88 ]
それだけだとこれでいいように見える

template<T>
struct glue
{
T value
glue(T v):value(v) {}
};

float f=10.2;

glue<float&> g1(f);
glue<float> g1(2.3);

692 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:58:03.71 ]
boost.moveにrvalue判定できるマクロあったよね

693 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:37:33.46 ]
C++の標準STLって覚えたほうがいいのか

694 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:38:47.45 ]
STL覚えてないってことはC++の基本すら習得出来てないってことだろ

695 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:45:12.22 ]
>>694
なるほど

696 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:10:27.44 ]
インターフェースクラスのGetメソッドで
サブクラスのフィールドのオブジェクトポインタを
返したいんだけどどうしたらいいですか?

インターフェースクラスは複数のサブクラスに継承されて、それぞれのオブジェクトの定格は違う

697 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:29:30.05 ]
コンパイル通らなくてもいいから
どんなことしたいかソース書いた方がいい

698 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:45:35.96 ]
>>694
C++に詳しそうだから聞こう。std::messageってLinuxだと
gettextと同じカタログファイルでいいんだが、
windowsだと、どこのカタログから文字列取ってくるんだ?

699 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:54:16.40 ]
STLならともかくlocale系なんてまともに使ってる人いるんだろうか

700 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:56:41.90 ]
多言語対応は大抵ICUまかせ



701 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:58:09.30 ]
localeはvactor<bool>ぐらいのうんこ

702 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:12:53.22 ]
>>697
あっ
メソッドのおしりに=0をつければサブクラスでそのメソッドを定義できるんですね
ありがとうございました

703 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:13:18.02 ]
>>697
あっ
メソッドのおしりに=0をつければサブクラスでそのメソッドを定義できるんですね
ありがとうございました

704 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:15:22.58 ]
メッセージカタログの仕様、MSDNで探しても見つからんな…
つかVC++の日本語localeはゴミみたいな仕様なのでもしかしたら未実装なのか?^^

705 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:21:21.59 ]
ttp://cpplover.blogspot.jp/2010/06/clocale.html
ttp://cpplover.blogspot.jp/2011/04/boostlocale.html

706 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:28:38.43 ]
std::message ←

707 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:47:28.40 ]
>>704
stdcxx.apache.org/doc/stdlibref/messages.html#sec12
en.cppreference.com/w/cpp/locale/messages
に書いてある
rwstdmessages.catや/usr/share/locale/de/LC_MESSAGES/sed.moを探してみたら?

708 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:04:06.31 ]
インタフェース
インターフェース
インタフェイス
インターフェイス

どれ派?

709 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:08:32.63 ]
>>697
じゃなかった、返り値の型が定まらないです。
class Interface{
 public:
 virtual Object GetObject() = 0;
};

class hoge:Interface{
 Object obj;
public:
 hoge(Object obj):this.obj(obj){}
};

710 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:15:37.27 ]
>>708
google
約 1,510,000 件
約 3,400,000 件
約  363,000 件
約 2,550,000 件



711 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:19:41.67 ]
>>710
yahooにしろよ

712 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:22:30.47 ]
ヤホーで調べました

713 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:29:12.97 ]
>>709
よく分からんけどこういうこと?
ideone.com/jC5TY

それとも
class hoge:Interface{
 HogeObject obj;
とかになるってこと?

714 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:32:46.96 ]
>>713
それっぽいけど、Objectポインタってなんでもいいの?
まぁ4バイト固定だからできるんですか。
実際に仮想関数作る時に適当なポインタいれるのは一般的に使われる手法なんですか?

715 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:43:56.65 ]
>>714
= 0のこと?
4バイト固定でも適当なポインタでもなく
純粋仮想関数を定義するただの構文で、0に数値としての意味は無いよ

716 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:58:54.33 ]
>>701
まともに動かない事もあるしな

717 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 00:01:09.69 ]
メモリポインタでいいよ

718 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 00:01:58.47 ]
>>715
いや、リンク先の1行目でObjectを定義してて
それをポインタとして利用してるから、それはよく使われるのかなーと・・・

例えるなら、数値データリストクラスと文字データリストクラスがあって、
それぞれ数値データクラスのリストと文字データクラスのリストを持っている。
データクラスのポインタを各リストクラスで共通のメソッドでGetしたいので同じインターフェースクラスを作って継承することにする。

・・・すると、インターフェースクラスの宣言?のGetメソッドの返り値は、
数値データクラスのポインタも文字データクラスのポインタでも適さないのでは?
という感じです。
Object構造体はあくまでポインタを使うための使い捨てするのは一般的な手法なのかなと・・・

わかりにくてすいません。

719 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 00:24:10.23 ]
>>718
>それをポインタとして利用してるから
structはstructでしかなくポインタではないよ
Object ←実体
Object* ←Objectのポインタ
&objの& ←アドレス演算子
hogeのメンバobjは実体、hogeコンストラクタのaobjも実体(値渡し)
GetObject()の戻り値はObjectのポインタ
というところまで分かる?

>>709のObjectはどう扱いたいの?

720 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 08:39:54.15 ]
>>719
例えが悪かったです

class Interface{
 public:
 virtual ??? GetObject() = 0;
};

class hoge:Interface{
 ObjectA obj;
public:
 hoge(ObjectA obj):this.obj(obj){}
};

class hage:Interface{
 ObjectB obj;
public:
 hage(ObjectB obj):this.obj(obj){}
};

このような時、InterfaceのGetObjectメソッドの返り値をどのように宣言したらいいのか
ということです。

>>713でいうなら、hogeクラスの他にhuga,hogaクラスがあったとして
それぞれの扱うobjの型は違います。



721 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 09:42:53.65 ]
同じように扱えるからinterfaceなのであって、
ObjectAとObjectBが同じinterfaceを持つならそれを返せばいい。
class Object{
public:
 virtual int GetID() = 0;
};

class ObjectA : Object {
public:
 int GetID(){...}
};

class ObjectA : Object {
public:
 int GetID(){...}
};

class Interface{
public:
 virtual Object* GetObject() = 0;
};

ObjectAとObjectBが同じinterfaceを持たないなら、
そもそもInterface::GetObject()を使って何をしたいか意味不明。

722 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 13:03:15.13 ]
ああ、インターフェイスを2個使えばいいという感じですか

723 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 20:59:01.80 ]
Javaとかの出身なのかなあ

724 名前:デフォルトの名無しさん [2012/06/11(月) 23:54:12.27 ]
union foo { int f; };
struct bar {
 foo a;
 union { int b; };
};

bar zot;
int bar::*p = &bar::b;
int x = zot->*p; // is zot.b
int bar::*q = XXX;
int y = zot->*q; // is zot.a.f

これを満たすようにするにはXXXの所どう書けばいいんでしょうか?

725 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 00:12:16.32 ]
できないと思う

726 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 00:15:18.44 ]
C++ってGUIライブラリが貧弱だよね

winのデスクトップアプリを作成するとき皆さんはなにをつかってるの?


727 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 00:24:56.62 ]
C++

728 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 00:28:10.44 ]
>>724 やっと動いた 思ったより厄介だぞこれ

union foo {
int f;
void operator=(int x) {
f = x;
}
};
struct bar {
foo a;
union { int b; };
friend std::ostream& operator<<(std::ostream& os, foo& f);
};

std::ostream& operator<<(std::ostream& os, foo& f)
{
std::cout << f.f;
return os;
}

int main()
{
bar zot;
zot.b = 123;
zot.a = 456;
int bar::*p = &bar::b;
int x = zot.*p; // is zot.b
foo bar::*q = &bar::a;
foo y = zot.*q; // is zot.a.f
std::cout << x << std::endl;
std::cout << y << std::endl;
}

729 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 01:35:48.51 ]
なにがしたかったの?やりたいことによってはBoost.Variant使ったほうが楽かも知れんよ

730 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:43:54.54 ]
>728 qがint bar::*じゃないじゃん。



731 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 09:09:03.00 ]
>>730
unionが名前空間じゃないしクラス名でもないから通らないんだって
やってみろ

732 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 10:35:05.45 ]
>>725の言うように出来ないだろ。
int bar::*単体でネスト内にアクセスしたいんだろうし。

呼び出し側を変えていいならコピーしなくてもzot.*q1.*q2で十分。
ideone.com/OR9Zp

pとqが同じ型であればいいだけなら関数ポインタで似たものにはなる。
ideone.com/22kQL

733 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 10:39:53.63 ]
関数ポインタちょっと訂正(int→int&)
ideone.com/KnuVI

734 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 11:01:35.15 ]
reinterpret_cast使うしかないな

735 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 11:20:23.42 ]
移植性無視するのか

736 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 12:16:05.92 ]
>>728
Boost.Variantを使ってやってみた
ttp://ideone.com/cSE2g

737 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 20:15:35.48 ]
offsetofとreinterpret_cast使うしか無いな

738 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 21:08:41.94 ]
それにしてもunionに名前が付いただけでなんだってこんな面倒な事になるんだろうな

739 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 23:30:49.04 ]
unionなんか使うから

もともとC++ではunionは型安全でない点で推奨できるものではなかったし
最近では(型を意識しない)ジェネリックなプログラミングにも対応できないしで
Cから引き継いでしまった負の遺産といっていいだろ

740 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 23:38:09.53 ]
>>739
無名構造体が書けるC++11で>>724のunionを両方ともstructに置き換えても同じことが起きるぜ。



741 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 00:13:25.65 ]
それは 無名構造体なんか使うから になるだけでは・・・

というかもともとの話の本質はunionも無名なんちゃらも関係なく
直接のメンバとメンバのメンバを同列に扱いたいけどどうしようという話だよな

742 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 00:18:58.86 ]
そういう事ならハンドリング時ラッピングテンプレートクラス+関数を作ればいいんじゃね

743 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 01:46:00.21 ]
>>728
>>732と同じ方向性だが最初からC++っぽい設計にしとけば悩むほうが難しいくらいだったろうに

union foo { int f; };
struct bar {
foo a;
struct { int b; };
int get_f() { return a.f; }
int get_b() { return b; }
};

int main()
{
bar zot;
zot.b = 123;
zot.a.f = 456;
int (bar::*p)() = &bar::get_b;
int x = (zot.*p)(); // is zot.b
int (bar::*q)() = &bar::get_f;
int y = (zot.*q)(); // is zot.a.f
std::cout << x << std::endl;
std::cout << y << std::endl;
return 0;
}

744 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 14:40:09.67 ]
std::list<double &> に相当するものってないの?
boost:intrusive
がそれっぽいけど doubleとかintとかは扱えないっぽい

745 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 15:58:15.10 ]
ある文字列(std::string型)からユニークなIDを作成する静的な方法はないでしょうか。

ある文字列のペアを引数に取ることで自作クラスの実体のアドレスを返す関数、またはクラスを
作りたいと考えています。

Hoge* rtnHoge(std::string a,std::string b){...; return &hoge;}//例

上記のような方法で一度作成したのですが、
・この方法ではペアの検索に時間がかかる(std::mapを使用しました)
・aとbに入れる文字列はコーディング時に決めうちで入力する

の二つの特徴から、
テンプレート等を利用して別途にアドレスを確保する箇所を作成したいと考えています。
テンプレートの特殊化では文字列を受けることができないため、
文字列からint型のユニークなIDを再生することが出来ると思い、その方法を探しています。

もしどなたか良い案などがありましたらアドバイスのほう頂けたら幸いです。

746 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 16:05:28.09 ]
crc

747 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 16:22:51.36 ]
なぁなぁ。静的ってことはコンパイル時ってことじゃろ?
しかしクラスのオブジェクトのアドレスっていうのはコンパイル時にはわかっていないじゃろ。
どうやってMooRieなんじゃないかって気がするんだよね。

748 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 16:24:04.04 ]
>>745
CLSIDかSHA256とか

749 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 16:50:14.75 ]
>>746,748
レスありがとうございます。
CRC,CLSID,SHA256を少し調べてみましたが、動的な方法になってしまいそうですね・・・。

>>747
そうですね、コンパイル時に確定したいと思っています。
テンプレートを使えば
template<int ID=0>
class Hoge{}

Hoge<0>,Hoge<1>,Hoge<2>
上記は全て異なる型として生成されるので、
この中それぞれに別途にシングルトンのようなクラスを生成してアクセスすれば
実現できると考えました。
ですので、静的に、コンパイル時に文字列からユニークなIDが生成できれば・・・と思い、
こちらに質問させていただきました。


750 名前:デフォルトの名無しさん [2012/06/13(水) 16:55:53.76 ]
aとbの最大長が固定なら連結してmapのキーにすればいいんじゃないの?



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関数でないと無理なものはまあ扱わなくもない






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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