C++相談室 part38

このエントリーをはてなブックマークに追加
1(`・ω・´)
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

前スレ part36
http://pc5.2ch.net/test/read.cgi/tech/1096304546/

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
2デフォルトの名無しさん:04/11/27 00:57:51
2
3v(^・^)v:04/11/27 01:05:59
ここはネタスレとして使って下ちい。
4停止しました。。。:04/11/27 01:17:37
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
5再開しました。。。:04/11/27 02:31:02
真・スレッドリジューマー。。。( ̄ー ̄)ニヤリッ
6デフォルトの名無しさん:04/11/27 03:11:52
>>1
間違えたのなら削除依頼出してくれ。
7(`・ω・´) :04/11/27 04:02:06
削除依頼出しときました。気長にお待ち下さい。
8デフォルトの名無しさん:04/11/27 04:09:17
Boostつかうと一気にコンパイルエラーの行数が10倍に?!
9デフォルトの名無しさん:04/11/27 10:25:53
Boostつかうと一気にタイプ量が10倍に?!
10再開しました。。。:04/11/27 13:14:47
Boost使うと一気に使えるコンパイラの数が1/10に?
11デフォルトの名無しさん:04/11/27 13:18:28
C++コンパイラって10個あったっけ?
12デフォルトの名無しさん:04/11/27 21:33:53
VC++6.0 VC++.NET VC++.NET2003だけでも3つ
13デフォルトの名無しさん:04/11/28 05:21:24
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
class A : public std::unary_function<int, bool>{
public:
int x;
A() {}
A(int x) : x(x){}
virtual bool operator()(int y) { return x < y; }
};
class B : public A {
public:
B() {}
B(int x) : A(x){}
virtual bool operator()(int y) { return x > y; }
};
void aaa(vector<int>& v, A &a)
{
vector<int>::iterator x = find_if(v.begin(), v.end(), a);
cout << *x << endl;
}
int main()
{
B b(3);
vector<int> v;
for (int i = 1; i < 5; i++)
v.push_back(i);
aaa(v, b);
}
こうすると、関数 aaa の find_if で、クラス A の operator()() が
呼び出されるんですが find_if には virtual は意味ないんですか?
14デフォルトの名無しさん:04/11/28 11:13:04
>>13
find_ifなどのアルゴリズムの場合、ファンクタは値渡しをする。
Bridgeパターンなどを用いると吉。
1513:04/11/28 16:52:42
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
struct B {
int x;
B(int x = 0):x(x){}
virtual bool o(int y) = 0;
};
struct B1: public B {
B1(int x = 0):B(x){}
bool o(int y) { return x < y; }
};
struct B2: public B {
B2(int x = 0):B(x){}
bool o(int y) { return x > y; }
};
struct A {
B *b;
A() {}
A(B *b) {this->b = b;}
virtual ~A(){delete b;}
bool operator()(int y) { return b->o(y); }
};
Bridgeパターンということは、こんなかんじっすか?
このあと、A a1(new B1(3)); A a2(new B2(3)); てなかんじ。
~A() {delete b;} は、やめて、
B *b1 = new B1(3);
A a1(b1);
delete b1;
のほうがよさそうですね。
16デフォルトの名無しさん:04/11/28 20:58:29
>15
だいたいそれで大丈夫だと思いますが,メモリ確保を自前でやるのはあまり感心できません.
そのコードは使い方を一歩間違えるだけで簡単にリークするので.
工夫次第でもっと良いコードになると思いますよ.
1716:04/11/28 21:14:53
あ,違う.全然ダメだ.少なくとも前者のコードは
多重deleteを引き起こす典型的なコードですのでダメです.
shared_ptrなどの参照カウント型スマートポインタが要ります.
18デフォルトの名無しさん:04/11/29 09:00:18
Fight!
19デフォルトの名無しさん:04/11/29 11:33:36
              __,,,,,,
         ,.-'''"-─ `ー,--─'''''''''''i-、,,
      ,.-,/        /::::::::::::::::::::::!,,  \
     (  ,'          i:::::::::::::::::::::;ノ ヽ-、,,/''ー'''"7
      `''|          |:::::::::::::::::::::}     ``ー''"
        !       '、:::::::::::::::::::i
        '、 `-=''''フ'ー''ヽ、::::::::::/ヽ、-─-、,,-'''ヽ
         \_/     ヽ--く   _,,,..--┴-、 ヽ
                     ``"      \>
20デフォルトの名無しさん:04/11/29 12:49:28
C++では文字列はどのようにあつかったらよいのでしょうか?
linuxでもwindowsでも使える文字列クラスとかはないのでしょうか?
21デフォルトの名無しさん:04/11/29 12:53:09
VC++で計算した数値を引数で表示したいんですが、printfで表示されません。だからMessageBoxを使って表示したいんですがエラーがでます。どうしたらいいんでしょうか?どなたか分かる人教えてください。
22デフォルトの名無しさん:04/11/29 13:18:03
>>20
std::string
2321:04/11/29 14:06:55
int delta_time=final_time-initial_time;
で計算しました。これのdelta_timeを表示させたいんです!!
でもprintfやMessageBoxだとエラーとか表示されないです。
誰か教えて下さい。
24デフォルトの名無しさん:04/11/29 14:17:52
>>21
マルチしないであっちに引っ込んでろ。
http://pc5.2ch.net/test/read.cgi/tech/1101100031/
25デフォルトの名無しさん:04/11/29 14:50:02
>>21
ソースのどこかにコレを仕込んでおけばprintfが使える。
int main(void)
{
  return WinMain(GetModuleHanlde(NULL), NULL, PathGetArgsA(GetCommandLineA()), SW_SHOW);
}
26デフォルトの名無しさん:04/12/03 16:01:08
本スレ
27デフォルトの名無しさん
a