■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part11
751 名前:744 :02/10/08 15:33
学生時代以来のC/C++プログラミングなので、ちょっと混乱していました(w

たしかにプログラムが終了すれば、OS が面倒みてくれますね。常駐型の
プログラムを書いているので、別の問題とごっちゃになっておりました。

> あるクラスのインスタンスを一つ生成し、それがイベントループを廻し続けるような
> プログラムを書いているのですが、この場合デストラクタが呼ばれることがあるので
> しょうか。

結局のところ、興味があるのはこの点でして、このタイプのプログラムの場合、その
クラスのデストラクタを書いても意味はないかどうかということです。

752 名前:デフォルトの名無しさん :02/10/08 15:56
顔が汚くてもいいから、胸の大きい女性を望むあなた・・・。

753 名前:デフォルトの名無しさん :02/10/08 16:13
>>751
プログラムの終了処理はOSが面倒見てくれることばっかじゃなしなぁ。

754 名前:デフォルトの名無しさん :02/10/08 17:03
>>747
まあそういうVB厨プログラマが大勢いるから
NT系サーバの連続運用は難しいとかよく落ちるとか
1日一回リセットとかの話になるわけだな。


755 名前:デフォルトの名無しさん :02/10/08 17:04
>>747 100%pure VB房と認定されますた。
VB房ロゴの使用を許可します。


756 名前:デフォルトの名無しさん :02/10/08 17:25
>>747に同意

757 名前:デフォルトの名無しさん :02/10/08 19:31
ClassX a;
ClassX b;
ClassX c;

a = b;
a = c ←の時点で、aのデストラクタって呼ばれるのでしょうか?

ClassXの内部で動的にメモリを確保しているような場合、上のような
状況で開放する術はありますか?

758 名前:デフォルトの名無しさん :02/10/08 19:33
>>757
デストラクタじゃなくてoperator=が呼ばれる。


759 名前:757 :02/10/08 19:34
>>758
おお!即レスありがとうございます。
ちょっと悩んでいたんで、かなりうれしいです。

760 名前:デフォルトの名無しさん :02/10/08 19:59
しかしEffective C++ にのってる a = a のチェックって誰かしてる奴いるんか?

761 名前:デフォルトの名無しさん :02/10/08 20:07
自己代入のチエックってやっぱりthisとrhsのアドレス比較するんかなあ。

762 名前:デフォルトの名無しさん :02/10/08 20:14
>>760
メンバがスマートポインタなら a = a でもデータ消失はないから大丈夫。
さらに operator = やコピーコンストラクタも定義する必要なし。夢のハッピーライフ。

でも、スマートポインタ使いまくりって奴もあまりいないが。


763 名前:デフォルトの名無しさん :02/10/08 20:28
>>760
Exceptional C++ の項目38に従って必要ならする…
と言いたいところだが、自己代入がボトルネックになる
場面なんて出会ったことないので結局やってないなぁ。

>>762
それじゃあ、デフォルトのoperator=とかコピーコンストラクタが
コピーじゃなくて実装の共有になってしまわんか?それで幸せなら
特に止めるつもりはないが。

764 名前:デフォルトの名無しさん :02/10/08 20:29
>>747
ねぇ、それはネタなの? 本気なの? 正しいの? 間違ってるの?

765 名前:デフォルトの名無しさん :02/10/08 21:15
>>764
UNIXで仕事してたときに終了時に free をずらずらと書いて開放処理をしていたら
先輩にCPUに無駄な仕事してんじゃないと怒られました。

766 名前:デフォルトの名無しさん :02/10/08 21:15
>>760

a = a のチェックは必要なら普通するけど・・・ってのはウソで、
a = a でも問題ないようなコードで済ますことの方が多いか。

767 名前:デフォルトの名無しさん :02/10/08 21:20
a = a でも問題ないようなコードって、たとえばポインタなら自己チェックと
スマートポインタ以外の方法あるの?

768 名前:デフォルトの名無しさん :02/10/08 21:37
freeは未使用マークをつける
プログラム終了時には確保したメモリ領域はOSに返却される

どちらも「解放」という言葉を使ってるのが誤解を生む元になっているのではないだろうか。

#freeがOSに返却しないのは「多くの処理系では」という条件付らしいが,詳しくは知らん


769 名前:デフォルトの名無しさん :02/10/08 21:42
>>767
T& T::operator=( const T& other )
{
 T temp( other );
 this->Swap( temp );
 return *this;
}

http://www.gotw.ca/gotw/059.htm

770 名前:デフォルトの名無しさん :02/10/08 23:20
やってることは一緒だけど、ディープコピー・開放・ポインタ代入、とか。

771 名前:デフォルトの名無しさん :02/10/08 23:38
クラス内のフィールドに外部から値を取得することはできるが、
設定することはできず、クラス内部の関数からは設定することが
できることってできますか?

ClassA
{
private:
int m;
public:
ClassA(int m);
}

だと、mを取得することができない。Getなどのアクセサをつかわずに、
mをpulicにしても、なおかつ、設定はできないみたいなのはできますか?

772 名前:デフォルトの名無しさん :02/10/08 23:45
C++の仕様ではできない。素直にgetアクセサをつけるべし。
つかpublicなメンバ変数は、レコードのような扱いでないかぎり
あんまりお勧めできない・・・

<Del厨モード>
ちなみにC#ではgetのみのプロパティにて実現可能。
Javaにはないよね(藁
</Del厨モード>

773 名前:デフォルトの名無しさん :02/10/09 00:31
template<class T> struct id{ typedef T type; }; // dummy

template<typename Type, class Owner>
class read_only_field
{
public:
operator const Type& () const { return t; }
private:
friend typename id<Owner>::type;
read_only_field& operator=(const Type& ot) {t=ot; return *this;}
Type t;
};

class A {
public: read_only_field<int, A> m;
...
};

…99.5%くらいネタだけどな。

774 名前:デフォルトの名無しさん :02/10/09 01:57
void f(std::vector<int> (&vr));
void f(std::vector<int> &vr);
void f(std::vector<int> (&));
void f(std::vector<int> &);

全て同じ宣言ですか?

775 名前:デフォルトの名無しさん :02/10/09 01:59
>>774
同じだろう。プロトタイプ宣言の仮引数は型しかチェックされないから。

776 名前:デフォルトの名無しさん :02/10/09 02:01
>>775
レスサンクス。
やっぱりか(;´Д`)

777 名前:デフォルトの名無しさん :02/10/09 12:07
ウワァーイ777!!

778 名前:デフォルトの名無しさん :02/10/09 12:55
ウワーイ778!!

779 名前:デフォルトの名無しさん :02/10/09 13:14
delete >>777-778;
return -1;

780 名前:デフォルトの名無しさん :02/10/09 15:19
宿題スレに書いたんですが、レスが無いのでこちらにも書かせてください。

コールバックって、メンバー関数をじかに呼べないんですが、

class Aとclass Bがあって
Bは、コールバックされる関数(SetTimerとか)を使っていて、
さらにそのコールバックされる関数の中でBのメンバー関数を呼び出したい。

BにAのインスタンスのポインターを持たせればできますが、
1. Bの実装でAに依存しない(class Aのクラス定義を読み込まない)
2. Aをコールバックされる関数を含んだ中傷クラスのサブクラスとしない

という条件で、うまい方法ってないですか?

現状はtemplateを使って(public,private等は省略)
class base {
 virtual void operaot()() = 0;
};

template<class T>
class callback : public base
{
 typedef void (T::*F)();

 callback(T* obj, F func) : o(obj), f(func) {}
 void operator()() { return o->*f();

 T* o;
 F f;
};

とやって、AはBにcallbackのインスタンスを渡すようにしてますが、今市…

781 名前:デフォルトの名無しさん :02/10/09 15:43
>>780

普通に多重継承で interface (風のもの) 使えば?


782 名前:デフォルトの名無しさん :02/10/09 16:51
そりは、条件2にひっかっかって…
実は、class AはCOMのクラスなので、何か仮想関数持ったクラスを継承する
のは問題が起きるのではないかと思うのですが。
そんな事は無いのでしょうか?

783 名前:デフォルトの名無しさん :02/10/09 17:37
>>780
デリゲートって知ってるか?

784 名前:デフォルトの名無しさん :02/10/09 17:45
デリケートですか?デリケートですか?

785 名前:デフォルトの名無しさん :02/10/09 17:47
艦載陣さんですか?

786 名前:デフォルトの名無しさん :02/10/09 19:00
デリケートゾーンのかゆみに…

787 名前:デフォルトの名無しさん :02/10/09 20:09
はっきり

 ま ん こ

と書けやゴルア!

788 名前:デフォルトの名無しさん :02/10/09 20:13
股間の痒みにメディナース

789 名前:デフォルトの名無しさん :02/10/09 20:32
変態ばっかだな

790 名前:デフォルトの名無しさん :02/10/09 20:33
まかいあんこやまらさきむんこは嫌いです

791 名前:デフォルトの名無しさん :02/10/09 21:45
クラス内ローカルクラス宣言てできますか?

class A
{
 class B
 {
  operator int() { return 1; }
 }
 B getB() { return B(); }
}MyA;

int a = MyA.getB();

みたいな
もちろんint b = B();はコンパイルエラーで

792 名前:デフォルトの名無しさん :02/10/09 21:46
クラスB定義のあとに「;」忘れました・・・

793 名前:デフォルトの名無しさん :02/10/09 21:47
Java厨か?
できるよ。


794 名前:名無しさん@Emacs :02/10/09 22:14
関数内にもできる。
実はつかったことないけど・・・汗

795 名前:デフォルトの名無しさん :02/10/09 22:15
関数内に関数はできないんだよなー。
なんでだろう。

796 名前:デフォルトの名無しさん :02/10/09 22:18
High-Cはできたなあ...

797 名前:デフォルトの名無しさん :02/10/09 22:20
関数オブジェクトならできるだろう。

798 名前:デフォルトの名無しさん :02/10/09 22:58
関数内クラス内に関数を作れば良いのだ!

799 名前:デフォルトの名無しさん :02/10/09 23:49
>>797
だがテンプレート引数として渡せないという罠。(なんとなく理由は想像がつく)

800 名前:デフォルトの名無しさん :02/10/10 00:22
>>780
AからBの関数を呼んで、BはAの(コールバックされる)関数を呼んで、
さらにそこからBの関数を呼ぶ、ということ?
で、AはBの定義やインスタンスを知っていて、しかもCOMのクラスなのね?
だとすると、多分Aはプラグインか何かだと思うけど、継承を避けるなら
780に類する方法しか無いと思う。ただ、Aを含むオブジェクトの中には
callback<A>もいて、それは仮想関数を持ったクラスを継承している。
WinもCOMも知らないから、何とも言えないけど、780で動いているなら、
継承は出来るんじゃあないかなあ。
構造上理由があって、継承を避けたいということならいいんだけど。

801 名前:デフォルトの名無しさん :02/10/10 01:05
Java厨というか、無知なだけです・・・
クラス内クラス宣言が利用に先立ってされなければならない(らしい)という所にひっかかってました

class A
{
 B getB();
 class B;
}; // コンパイルエラー「Bの重複定義」

というやつ・・・

class A
{
 int hoo() { return bar(); }
 int bar() { return 1; }
}

はOKなのに・・・

802 名前:デフォルトの名無しさん :02/10/10 15:42
>>782

A が COM オブジェクトなら、ITimerHandler とかのカスタム
インターフェイス(を定義して)持たせておけばよいのでは?

多重継承とCOMについては、一度 ATL のサンプルソース読んでみて。
インタフェイス継承も実装の継承も多用しているから、大分参考に
なるはず。

803 名前:デフォルトの名無しさん :02/10/10 16:29
>>801

class A
{
 int hoo(){ B b; }
 class B{};
};

これはOK
違いわかる?

804 名前:デフォルトの名無しさん :02/10/10 18:04
Visual C++ 6.0 で以下のようなコードを試しています。

 ofstream out;
 out.open("nowhere\\test.dat");

ところが、open に失敗します。
つまり、ファイルをオープンするとき、書き込み用の場合などは、
ファイルが存在しなくても、自動的に作成してくれるようですが、
ディレクトリも同時に作ってくれたりはしないみたいです。

ディレクトリを作成しつつファイルも作る方法はありますか?
あるいは、単独でディレクトリを作成する標準関数はあるのでしょうか?
(Windows 用の _mkdir などを使うしかないのでしょうか?)

805 名前:デフォルトの名無しさん :02/10/10 18:50
>>804
ファイルとディレクトリはWindowsでは全く別々のものなので、
ディレクトリを作ってからopenして下さい。

806 名前:デフォルトの名無しさん :02/10/10 19:36
STLのコンテナに自作したクラスhogeへのポインタを追加していって、それをソートするのに
namespace std
{
struct less<Particle*>: public binary_function<hoge const *, hoge const*, bool>
{
bool operator()(hoge* const a, hoge* const b)
{
return a->val < b->val;
}
};
};
std::list<hoge*> hogelist;
・・・//hogelistにnewしたhoge*を追加
hogelist.sort(std::less<hoge*>());
のようにしています。
・stdに手を入れていること
・hoge*に特化したstd::less<hoge*>を使っていること
の2点でよくないような気がするのですが、他の方法はありますか?

807 名前:デフォルトの名無しさん :02/10/10 20:11
>>806

STLスレッド part2
http://pc3.2ch.net/test/read.cgi/tech/1026793823/l50

808 名前:804 :02/10/10 20:15
>>805
うーむ、そうですか。
ディレクトリを作りつつ……というプログラムを C++ でやろうとしたら、
OS に依存したコードを書かなければならない、ということですね。
どうもありがとうございました。

809 名前:デフォルトの名無しさん :02/10/10 20:32
>>808
> ディレクトリを作りつつ...
> OS に依存したコードを書かなければならない、

当たり前だと思うけど...、全ての OS に階層ディレクトリがあると思っているのか ?

810 名前:デフォルトの名無しさん :02/10/10 20:57
>>804の言うOSとはWindowsとLinuxの2種類だと思う。

811 名前:デフォルトの名無しさん :02/10/10 21:55
>>810
> >>804の言うOSとはWindowsとLinuxの2種類だと思う。

>>804 だったら、Windows だけだろ ?

> Visual C++ 6.0 で...

812 名前:デフォルトの名無しさん :02/10/10 22:09
>>806
std以外の名前空間で定義すればよい。

namespace hehehe
{
template <typename T>
struct less<T*>: public binary_function<const T*, const T* , bool>
{
bool operator() (const T* a, const T* b) const
{
return a->val < b->val;
}
};
};

813 名前:デフォルトの名無しさん :02/10/10 22:09
>>811
あー,ちゃいます。
804が書いた>>808のレスの中で言ってる「OS」のことです。

814 名前:デフォルトの名無しさん :02/10/10 22:10
若干修正

namespace hehehe
{
template <typename T>
struct less<T> : public binary_function<const T*, const T* , bool>
{
bool operator() (const T* a, const T* b) const
{
return a->val < b->val;
}
};
};

815 名前:デフォルトの名無しさん :02/10/10 22:39
別にlessに手を入れる必要無いじゃん。
直接テンプレート引数にファンクタ渡せば?

816 名前:804 :02/10/10 22:46
>>809
> 全ての OS に階層ディレクトリがあると思っているのか ?

すみません、かなり勉強不足でした。

少なくとも C++ が走るようなものではそうだと思っていました。
ちなみに、どんな OS だと階層ディレクトリがないのですか?
(検索しても Windows/Unix/MacOS 以外については余り情報が得られないので。)

なお、
> ディレクトリを作成しつつファイルも作る方法はありますか?
に関連して、無効なパスを渡された場合、
1・階層ディレクトリのある環境ではディレクトリの作成を試みる
2・そうでないときは、やはりエラーを返す
というような機能を考えてみたのですが、
やはり無理、またはやらない方がよい、ということですか?

817 名前:デフォルトの名無しさん :02/10/10 23:12
>>816
ふるいmvsとか

818 名前:デフォルトの名無しさん :02/10/10 23:17
>816
プリンタや自販機のROMの中にもOS入ってたりする。

819 名前:デフォルトの名無しさん :02/10/10 23:32
>>815
どういう風に書けばいいの?

820 名前:デフォルトの名無しさん :02/10/10 23:38
>809
全てのOSにファイルはあるの?


821 名前:デフォルトの名無しさん :02/10/10 23:43
>819
list::sortには、Predを引数とする版があるだろ。

822 名前:デフォルトの名無しさん :02/10/11 00:01
>>821
ああなるほど、std::lessではなくて、適当な名前の比較関数オブジェクトを
渡してやればいいのですね。

823 名前:デフォルトの名無しさん :02/10/11 00:22
>>820
組み込みだとディスク自体が無いね

824 名前:デフォルトの名無しさん :02/10/11 06:54
ファンクタライクな物をVC.NETで作ってるんですが、
部分特殊化できないと LokiのTypeListみたいなのはつくれないんでしょうか?
//_Tはクラス. _R は戻り値の型. _Lは引数の型
template <typename _T,typename _R,typename _L>class FunctorX
{protected:
_R(_T::*mem_f1)(_L);
_R (*g_f1)(_L);
_T* obj_ptr_f1;
_T* func_obj_ptr_n1;
enum Mode{other,mem_ptr,ptr,func_obj}m_mode;
void Ini(){
g_f1= NULL;mem_f1 = NULL;
obj_ptr_f1 = NULL;func_obj_ptr_n1 = NULL;
m_mode = Mode::other;
}
public:
FunctorX(_T& ob,_R (_T::*f1)(_L)){
Ini();mem_f1= f1;
obj_ptr_f1 = ptr;m_mode = Mode::mem_ptr;
}
explicit FunctorX(_R (*f1)(_L)){
Ini();g_f1 = f1;
m_mode = Mode::ptr;
}
explicit FunctorX(_T& ob){
Ini();func_obj_ptr_n1 = &ob;
m_mode = Mode::func_obj;
}
FunctorX(){ Ini()}
~FunctorX(){}

825 名前:正男 ◆GVV43x.nK. :02/10/11 06:56
途中まで読んで頭が痛くなってまいりますた

826 名前:続き :02/10/11 06:56
_R call(_T& ob,_L a){
if( obj_ptr_f1 != NULL && mem_f1 != NULL && m_mode == Mode::mem_ptr){
return (ob.*mem_f1)(a);}
throw "Functor error";
}
_R call(_L a){
switch(m_mode){
case Mode::mem_ptr :
if( obj_ptr_f1 != NULL && mem_f1 != NULL )
                    return (*obj_ptr_f1.*mem_f1)(a);
break;
case Mode::ptr :
if( g_f1 != NULL )
return (*g_f1)(a);
break;
case Mode::func_obj :
if( func_obj_ptr_n1 !=NULL )
return (*func_obj_ptr_n1)(a);
break;
default:
break;
}
throw "Functor error";
}
_R operator()(_L a){return call(a);}
};

827 名前:main :02/10/11 07:01
struct Test
{
template<typename R,typename L> R f(L a){ return a*2;}
Test(){}
~Test(){}
};

int main()
{
Test c5,c5a;
Functor<Test,int,int> t5(c5,&Test::f<int,int>);

cout << t5.call(c5,100);
cout << t5.call(100);

cout << t5.call(c5a,100);//c5 の関数ポインタ経由で c5aを呼び出す???
cout << t5(100);

FunctorX< Functor<Test,int,int> ,int,int> t6(t5);
t6(100);

}

828 名前:デフォルトの名無しさん :02/10/11 09:47
>>824
その規模のコードはcppにしてどこかにアップしろ

コメントされてない(しかもインデントすらされていない)コードなんて
ただのゴミ

829 名前:デフォルトの名無しさん :02/10/11 13:48
>>828
template苦手だからってキレんなよw



830 名前:デフォルトの名無しさん :02/10/11 14:53
>>829
でもそれだけ書かれてもなぁ。

831 名前:829 :02/10/11 15:51
Lokiスレのほうに書きゃいいのに、とはオモウ。


832 名前:しつこく :02/10/11 18:50
TC++PL3rdや>>3のFinal Draftにある文法に
member-declaration
 :decl-specifier-seqopt member-declarator-listopt ;
 |function-definition ;opt
 |::opt nested-name-specifier templateopt unqualified-id ;
 |using-declaration
 |template-declaration
 ;
という部分がありますが上から三番目は何に使われてますか?


833 名前:デフォルトの名無しさん :02/10/11 20:05
ClassA{
private:
int *a;
public:
ClassA(){a = NULL}
ClassA(int i){ a = new int [i] }
}

みたいなクラスがあって、

ClassA ain = new ClassA[100];

で呼ばれるコンストラクタは引数なしのコンストラクタしか無理ですか?

834 名前:デフォルトの名無しさん :02/10/11 20:12
ClassA* ain = new ClassA[100](10);

835 名前:デフォルトの名無しさん :02/10/11 22:11
>>874
それほんとにいける?

836 名前:デフォルトの名無しさん :02/10/11 22:13
無理でせう。

837 名前:デフォルトの名無しさん :02/10/11 23:30
>>874は逝けそうだけど逝けなさそうな微妙なことを書かねばならなくなりました。

838 名前:832 :02/10/11 23:33
なんだこの低能なシーケンスは!

839 名前:デフォルトの名無しさん :02/10/11 23:33
ともっちに手取り足取りC++教えたい

840 名前:デフォルトの名無しさん :02/10/12 01:18
次のプログラムをコンパイルするとエラーが出てしまいます。
Aがシンタックスエラーを起こしていますとか。
どういうことなんでしょう?
本に書いてある通りにやっているのに・・・。
何がいけないのでしょう?

#include <stdio.h>
#include <stdlib.h>

class A {
public:
int id;
};



int main()
{
int i;
A c;

c.id = 100;
for( i = 0; i < 7; i++)
printf( "id = %d", c.id);

return 0;
}


841 名前:デフォルトの名無しさん :02/10/12 01:21
初心者が質問するなら、エラーをそのまま貼らないと。それから

> #include <stdio.h>
> #include <stdlib.h>

こんな低脳なコードを乗せている入門本は古すぎるか腐っているので
捨てた方が吉かと。


842 名前:デフォルトの名無しさん :02/10/12 01:22
コンパイラはなに?
bcc32では動いたよ。
拡張子は.cppとかにした?

843 名前:840 :02/10/12 01:28
.cから.cppになおしたらできました。
ありがとうございました。
一体2つはどう違うのでしょう?



844 名前:841 :02/10/12 01:30
C言語っていう腐れ言語しらんの?>>843

845 名前:デフォルトの名無しさん :02/10/12 01:33
ところで、stdlibをインクルードしてる理由は何なのさ?

846 名前:デフォルトの名無しさん :02/10/12 01:36
ループを7回まわしている理由モナー


847 名前:デフォルトの名無しさん :02/10/12 02:07
クラス内関数のテンプレート化で質問です

class A
{
 template<class T>
  T foo()
 { なんたらかんたら }
}myA;

int a = myA.foo<int>();

でコンパイル通ってしまうんですが、
これはどう解釈されてるんでしょうか?

「返値の型だけ異なる」オーバーロードってNGでしたよね?

848 名前:デフォルトの名無しさん :02/10/12 02:07
age忘れ...

849 名前:デフォルトの名無しさん :02/10/12 02:44
>>847
コンパイラがbccだからじゃない?

850 名前:デフォルトの名無しさん :02/10/12 03:55
突然ですが純粋仮想関数のデストラクタは必ず実装しなければならない、
とは知りませんでした。首吊ってきます。


851 名前:デフォルトの名無しさん :02/10/12 05:47
最近なかなか寝付けません。どうしたら良いのでしょうか?

852 名前:832 :02/10/12 06:47
くだらなすぎ

853 名前:デフォルトの名無しさん :02/10/12 08:32
>>847
テンプレートはオーバーロードではないからだろ

854 名前:デフォルトの名無しさん :02/10/12 10:11
C++で、2次元(以上の)配列に対して、
辞書式順序でsortできるようにするためには、
bool operatorとsortを使えばよいらしいというのは、
分かったのですが、具体的なコーディングが分かりません。
教えてください。

855 名前:832 :02/10/12 10:20
>>854
何がしたいのか読み取れん。いったい何がわかっているというのだ。

856 名前:デフォルトの名無しさん :02/10/12 10:21
ソートっつー概念はそもそも直線的なものにしか成り立たないんじゃないか?
2次元以上の要素をいったいどう並び替えろと?

857 名前:デフォルトの名無しさん :02/10/12 10:25
もしかして組み込みの配列?

858 名前:854 :02/10/12 10:37
辞書式順序です。
例えば、(1,2),(5,6),(5,4),(2,4)というデータがあったら、
第一番目のデータを見て、(1,2),(2,4),(5,6),(5,4)
と並び替え、
一番目のデータが同じ時は、
(1,2),(2,4),(5,4),(5,6)
のように並び替えたいのです。

数学的に書くと
(i,j)<(k,l)←→i<k 
        i=kのときは、j<l
としたいということです。

859 名前:832 :02/10/12 10:42
>>858
文字列のソートがどうやっているかわかってるなら、それと同じようにすれば
いい。

860 名前:デフォルトの名無しさん :02/10/12 12:52
>>858
> 辞書式順序です。

頼むから、用語はちゃんと覚えてくれ。あやふやだったらはじめから使うな。

> 一番目のデータが同じ時は、
> (1,2),(2,4),(5,4),(5,6)
> のように並び替えたいのです。

というのは、単に複数キーでソートすると言う。
(ちなみに、辞書式というのは概ね文字コード順にソートすることを指す。)

> 数学的に書くと
> (i,j)<(k,l)←→i<k 
>        i=kのときは、j<l

と言うのがわかっているなら、qsort() の比較関数をそのように書けば良いだけだよ。

でも、そう言うデータなら二次元配列より構造体の一次元配列の方がわかりやすいと思う。

861 名前:デフォルトの名無しさん :02/10/12 14:00
>>860
> >>858
> > 辞書式順序です。
>
> 頼むから、用語はちゃんと覚えてくれ。あやふやだったらはじめから使うな。

固定長の文字列とみなせば辞書式と言っても間違いではない。

> (ちなみに、辞書式というのは概ね文字コード順にソートすることを指す。)

別に文字コードじゃなくたっていいんだよ、順序さえあれば。


862 名前:デフォルトの名無しさん :02/10/12 14:32
テンプレート型のクラスのコンストラクタを
宣言と実体を別ファイルで書くことは出来なんでしょうか?

ファイル:a.h
template<class T>
struct A
{
A();
};

ファイル:a.cpp
template<class T>
A<T>::A()
{
}

このクラスを別のファイル(main.cpp)で使おうとすると、
外部シンボルが未解決ですと言われます。
何か書き方が間違っているのでしょうか?
一応a.hに実体もまとめて書けばエラーにはならないのですが・・・

863 名前:デフォルトの名無しさん :02/10/12 14:39
過去ログを参照願います。

864 名前:デフォルトの名無しさん :02/10/12 16:16
>>861
> 固定長の文字列とみなせば辞書式と言っても間違いではない。

ハイハイ、人の指摘に手一杯で、>>858

> 数学的に書くと
> (i,j)<(k,l)←→i<k 
>        i=kのときは、j<l

は見てないのね。

> 別に文字コードじゃなくたっていいんだよ、順序さえあれば。

ハイハイ、「概ね」と言う言葉も理解できなかったのね。


ったく、話の流れぐらい読めよ。

865 名前:デフォルトの名無しさん :02/10/12 16:34
>>864
何が言いたいのかわからんが「辞書式比較」の定義って、二要素なら
 > 数学的に書くと
 > (i,j)<(k,l)←→i<k 
 >        i=kのときは、j<l
普通まさしくこれのことだぞ。先頭要素を先に比較して、同じなら残りの要素で比較。
std::lexicographical_compare でも見れ。

866 名前:デフォルトの名無しさん :02/10/12 16:35
( ´_ゝ`)マターリ シヨウヨ

867 名前:デフォルトの名無しさん :02/10/12 16:36
>>849
VCやgccでは無理なんですか・・・

>>853
>>847のコードはfooが呼ばれる度に
class A
{
 int foo() {}
 char foo() {}
 :
 :
};
みたいに展開されると思ってたんですが
違うのですか・・・?

868 名前:854 :02/10/12 16:37
>>859 文字列のソートがどうやっているかわかってるなら、それと同じようにすれば
いい。

それはそうですが、それをsortとbool operatorでできますか、ということです。
一から自分でプログラムしてもいいですが、面倒なので。
あまり自信もないし。


>>860
>頼むから、用語はちゃんと覚えてくれ。あやふやだったらはじめから使うな。

別にあやふやでないです。
辞書式順序というのは、正式な言葉のはず。
ただプログラミングの世界ではないのかも。

> 一番目のデータが同じ時は、
> (1,2),(2,4),(5,4),(5,6)
> のように並び替えたいのです。

>というのは、単に複数キーでソートすると言う。

では複数キーでソートするやり方を教えてください。
できればsortのような組み込みのアルゴリズムを使ってもらえると助かります。

869 名前:デフォルトの名無しさん :02/10/12 17:08
>>867
class A
{
template< class T > T foo(){}
};


class A
{
 template<> int foo<int>(){}
 template<> char foo<char>(){}
};

って展開されると思う。

870 名前:デフォルトの名無しさん :02/10/12 17:20
>>868
できるでしょ
bool operrator < で lexicographical_compare つかって sort に突っ込めば?
自分でコーディングする部分なんてほとんど無いよ

871 名前:862 :02/10/12 17:37
探し方があまいのか結局分かりませんでした。
誰かヒントだけでも…

872 名前:デフォルトの名無しさん :02/10/12 17:42
>>871
テンプレートはそういうものだと思ってあきらめましょう。。。

873 名前:デフォルトの名無しさん :02/10/12 17:43
>>871
exportキーワードをまともにサポートしている処理系でないと、
テンプレートの宣言と実体を分けて書くことはできない。

874 名前:デフォルトの名無しさん :02/10/12 17:43
template<class T> < ん? T はintかよしよし分かった。。。ん?A()はどこ行った?
struct A
{
A();
};

一方その頃 cpp では。。。

ファイル:a.cpp
template<class T> < おーい、俺はどうしたら良いんだよ〜、なんか不安になってきたよ。。
A<T>::A()
{
}

875 名前:デフォルトの名無しさん :02/10/12 17:47
>>860の恥の上塗りには笑った

876 名前:デフォルトの名無しさん :02/10/12 17:56
>>868
コンテナの比較は辞書式だから固定長ならboost::arrayでも使えば?

877 名前:862 :02/10/12 18:05
>>872-874
どうもありがとうございます。
いままでコンストラクタのところでしかエラーが出てなかったんで、
コンストラクタさえどうにかなれば可能だろうと考えていましたが、
今テストしてみた結果、実体作るとやっぱりメンバー関数も無理だと
言うことが分かりました。
確かにa.cppの型を解決する方法が無いですもんね…。
(いままでコンパイラが勝手に解釈してくれてるのとばかり…)
素直にあきらめることにします。

878 名前:デフォルトの名無しさん :02/10/12 19:19
exportをサポートしてる処理系ってComeau以外にある?

そういえば…Comeauのネット上の試用コンパイラ(?)は
template <template <class> class Container> class HogeにSTLのコンテナを渡せなかったなぁ。
(→試してないけど、template <template <class, class> class Container>になら渡せそうだった。)
これって普通?VC,BCC,gcc,+STLPortだと文句言わずにコンパイルしてくれるんだけど。

879 名前:デフォルトの名無しさん :02/10/13 01:18
>>862
もし、テンプレート引数 T に渡す型とかがいくつかに限定されているなら、
それらを a.cpp で明示的にインスタンス化するという手は使えるけど。
template A<int>;
template A<char*>;
とか。

880 名前:デフォルトの名無しさん :02/10/13 02:46
STLのイタレータの継承の一般的な仕方がわかりません.

コンテナのbegin,endの代入も苦しいし,
algorithmライブラリを使えるようにするのも苦しい.
_Rb_tree_iterator<...>とか書かないとうまい事いかない
もんなんでしょーか?
_Rb_...とか書くと移植性0になりそうなので,
幸せになれる方法を教えてください.


881 名前:デフォルトの名無しさん :02/10/13 02:56
>>880
C++標準ライブラリP285〜、§7.5.2「ユーザー定義の反復子」に詳しいです。

class MyIterator
: public std::iterator<std::bidirectional_iterator_tag, type> {
...
};

882 名前:862 :02/10/13 02:58
>>879
その方法>>877書いた直後に思いついたんですけど、
明示的に宣言出来るところがないんですよ。
テンプレート使ってるコードは全部ヘッダに詰め込むのが基本なんですかね??

883 名前:880 :02/10/13 03:32
>>881
その本持ってますが,そこではコンストラクタで
コンテナを受け取るという事をやっていて,
コンテナのbeginメンバ関数からの代入は扱ってません.

884 名前:デフォルトの名無しさん :02/10/13 05:46
>>883
boost::iterator_adapter

885 名前:デフォルトの名無しさん :02/10/13 11:39
>>882
template A<int>; って書き方は、どこででもできると思うけど。
別にオブジェクトとか関数とかを定義しているわけでもないし。

886 名前:デフォルトの名無しさん :02/10/13 16:32
CかC++かどっちか判断できなかったので
こちらで質問させていただきます。
VBから呼び出し可能なDLLを作成しています。
調べていく上でエクスポートの方法は
__declspecでのエクスポートではなく
Defファイルへの記述でのエクスポートが必要ということが分かりました。
それで質問というのはDefファイルっていうのは
Func @1
というような記述をしますよね?
そこでClass CTestのメンバ関数GetFileNameを記述するには
どう記述したらいいでしょうか?
適当に書いてみても駄目でした。
文法的にどういう風に「クラスののメンバ関数」のGetFileName
ということを書いたらいいのかわかりません。
教えていただけませんか?
よろしくお願いします。

887 名前:デフォルトの名無しさん :02/10/13 16:47
>>886
VC++スレってなかったかな・・・

VBからC++のクラスを直には呼べないよ。ActiveX(COM)にするしかない。
呼べるのはCの関数形式のもの。これのやりかたはFAQなので省略。

888 名前:886 :02/10/13 16:54
>887
え、defファイル自体VCの話しだったんですね、
スレ違いですね、失礼しました。

Comにしなきゃだめなんですね、
わかりました、ありがとうございます。
ではVBの話しは別にして、
defファイルでクラスごと、または
クラスのメンバ関数のエクスポートの記述方法だけでも
教えてもらえませんでしょうか?
もう半年くらいわからなくて半分以上放置になってる
悩み事なんです。
これで消えますのでよろしくお願いします。

889 名前: :02/10/13 17:34
>>888
普通はDEFファイルを書く必要はないが、
どうしてもDEFでやりたいなら・・・。

DEFファイルではクラスごとエクスポートすることはできない。
メンバごとにエクスポートする必要がある。

例えば、こういうクラスAがあったとすると、

 class A {
 public:
  A();
  int a(int, char*);
 };

DEFファイルにはこのように書く。

 EXPORTS
  ??0A@@QAE@XZ @1 NONAME
  ?a@A@@QAEHHPAD@Z @2 NONAME

装飾名はMAPファイルで確認すること。@ordinalとNONAMEは
なくても構わない。

890 名前:デフォルトの名無しさん :02/10/13 19:16
Chain of responsibilityパターンみたいな、階層構造を表現するために
親へのイテレータをsecondに持ったマップのようなモノを使いたいのですが
既存のライブラリにそういうモノって無いでしょうか?

要求としては、
・"文字列"と"親を指すイテレータ"を格納できる
・マップ中のある要素に"格納してある文字列"でアクセスできる
・そしてその要素から親まで順番にたどりつつ
・さらに現在の要素に格納されている文字列を参照できる

イメージとしては
 map<string, iterator> chainmap;
のような感じで、例えば
A ─ B ┬ C ─ E
      └ D ┬ F
          └ G
という階層構造にしたとして、
 chainmap["D"].PrintUpToParent();
とかすると
 for (it = *chainmap["D"]; it != chainmap.end(); it = it->second)
  cout << it->first << endl;
みたいな処理をしたいのです

891 名前:デフォルトの名無しさん :02/10/13 19:17
あう・・・>>890の出力結果を
D
B
A
にしたいという事です・・・

892 名前:デフォルトの名無しさん :02/10/14 16:18
自作のクラスをfor文使って配列に入れたいのですが、方法が分かりません。
要するに自作クラスのポインタをスタックに入れる処理がしたいのです。
よろしくお願いします。

893 名前:デフォルトの名無しさん :02/10/14 16:21
class Jisaku { /*definition*/ };

Jisaku* jien[N];
for(int i=0; i<N; i++) {
 jien[i] = new Jisaku();
}

894 名前:デフォルトの名無しさん :02/10/14 16:23
>>892
std::vector< boost::shared_ptr<Jisaku> > jien;
jien.assign( N, new Jisaku );

>>893
最後の()は不要


895 名前:894 :02/10/14 16:24
スタックに、か。忘れてくれ。

896 名前:デフォルトの名無しさん :02/10/14 16:29
>>894
もしかして普段から()省いてますか?

897 名前:デフォルトの名無しさん :02/10/14 16:43
ハイパーカード?

898 名前:デフォルトの名無しさん :02/10/14 17:38
>>894
それってjienいっぱいに同じインスタンスが敷き詰められるんじゃ・・・

899 名前:衝撃の事実(漏れにとっては・・・) :02/10/15 16:01
class FileWrapper
{
 ofstream* FileHandle;
public:
 FileWrapper(const char* fname) { FileHandle = new ofstream(fname, ios::out | ios::trunc); }
 ~FileWrapper()              { delete FileHandle; }

 FileWrapper& operator <<(ostream& (*pf)(ostream&)) { *FileHandle << pf; }
 template<class T> FileWrapper& operator <<(T arg)        { *FileHandle << arg; }
};

int main()
{
 // 処理A /////////////////////////////////////////////////////////
 FileWrapper* FileStream = new FileWrapper("testA.txt");
 boost::timer t;
 for (int i = 1; i <= 10000; ++i) {
  *FileStream << i << ",";
 }
 *FileStream << "\nElapsed time " << t1.elapsed() << " sec." << endl;
 delete FileStream;

 // 処理B /////////////////////////////////////////////////////////
 ofstream* FileHandle = new ofstream("testB.log", ios::out | ios::trunc);
 timer t2;
 for (int i = 1; i <= 10000; ++i) {
  *FileHandle << "no " << i << "," << flush;
 }
 *FileHandle << "\nelapsed time " << t2.elapsed() << " sec." << endl;
 delete FileHandle;
}

900 名前:衝撃の事実(漏れにとっては・・・) :02/10/15 16:01
環境 Win98SE PenIV1.8GHz DDR512MB
コンパイル BCC5.5.1

で、なぜか処理Aにかかった時間が平均約0.05秒に対し
処理Bにかかった時間が平均約0.5秒・・・その差なんと10倍

直打ちよりテンプレート化したほうが速いって一体どういう事ですか?

処理順で(boost::timerあたりに)何か違いがあるかもと思って
上下入れ替えてみても、結果はかわりませんでした

901 名前:衝撃の事実(漏れにとっては・・・) :02/10/15 16:04
処理Bのコード間違えた・・・
 boost::timer t2;
 for (int i = 1; i <= 10000; ++i) {
  *FileHandle << i << ",";
 }
 *FileHandle << "\nelapsed time " << t2.elapsed() << " sec." << endl;
です

902 名前:デフォルトの名無しさん :02/10/15 17:29
> FileWrapper& operator <<(ostream& (*pf)(ostream&)) { *FileHandle << pf; }
BCCは、こういうコードを通すのか、、、、return *this;を追加。

bcc:
Elapsed time 0.231 sec.
elapsed time 0.22 sec.
vc6:
 Elapsed time 0.1 sec.
elapsed time 0.1 sec.

903 名前:デフォルトの名無しさん :02/10/15 17:33
何でコンパイルするとそのコードが動くの?

904 名前:デフォルトの名無しさん :02/10/15 17:35
ああ、bccですか、失礼

905 名前:デフォルトの名無しさん :02/10/15 17:44
flushこれの違いだけだね

906 名前:デフォルトの名無しさん :02/10/15 20:12
そりゃflushしまくれば遅くなるだろうなあ・・・

907 名前:デフォルトの名無しさん :02/10/15 22:41
心底つまらない事実だったな。

908 名前:デフォルトの名無しさん :02/10/16 05:58
class A
{
 operator bool() { return false; }
};

int main()
{
 if (A()) return -1;
 /* Do something */
 return 0;
}

とあった場合、mainで呼び出されたAは
return 0;以降でデストラクトされると保証されますか?

909 名前:デフォルトの名無しさん :02/10/16 07:19
if文が終わった時点でデストラクトされるっしょ

910 名前:デフォルトの名無しさん :02/10/16 08:25
多倍長整数のよかライブラリ(ソースアリ)ってないっすかね。フリーで‥

911 名前:デフォルトの名無しさん :02/10/16 08:52
>>909
実は、多重起動を抑止するために
以下のような仕組みを考えてみたのですが、
なんとこれがうまく動いてしまっているんです。
環境依存の恐るべきコードですか?

class ImNotOriginal
{
public:
 ImNotOriginal()
 {
  hMutex = CreateMutex(NULL, TRUE, "このアプリケーションの名前");
 }
 ~ImNotOriginal()
 {
  ReleaseMutex(hMutex);
 }
 operator bool()
 {
  return (WaitForSingleObject(hMutex, 0) == WAIT_TIMEOUT);
 }
private:
 HANDLE hMutex;
};

int main()
{
 if ( ImNotOriginal() ) return -1;
 /* 何やらかんやら */
}

912 名前:デフォルトの名無しさん :02/10/16 13:18
>>911
そのロジックでは、本当は重複起動を防止できない。

実際に重複起動を防止できてしまうのは、デストラクタが呼ばれないのではなく、
最初に起動したプロセスが CreateMutex() と WaitForSingleObject() で
ミューテックス所有権を 2 つ獲得してしまっている為に、ReleaseMutex() を
2 回呼ばないとミューテックスを解放できないからだ。

WaitForSingleObject() はミューテックスが誰かに所有されているかを確認する
だけでなく、誰も所有していなかったら所有権を獲得してくる。
誰かが所有している場合、その所有しているスレッドが WaitForSingleObject() を
呼んだスレッド自身であった場合は、ロックされずに所有権をもう 1 つ獲得してくる。

ロックされないのは単独スレッドによるデッドロックを防ぐため、所有権をもう 1 つ
獲得してくるのは排他処理の帳尻を合わせるため (処理 A、B で排他が必要な時、
B が終わっていないのに A で排他が終了しただけで B が突入可能になるのはまずい
だろう?)。

ミューテックス所有権の獲得と放棄は必ず 1 対 1 で対応させること、その際
WaitFor*Object() 系 API の取り扱いには十分注意すること。

ミューテックスで重複起動を防止する場合は通常、WaitForSingleObject() を呼ぶ
のではなく、CreateMutex() 直後で GetLastError() の戻り値が ERROR_ALREADY_EXISTS
であるかどうかを調べる。

913 名前:デフォルトの名無しさん :02/10/16 17:15
>>912
詳しい説明ありがとうございました

では質問を変えて、operator bool()の実装を
return (GetLastError() == ERROR_ALREADY_EXISTS)
にした場合、コンストラクタ→operator bool()と呼ばれる保証はありますでしょうか?

914 名前:デフォルトの名無しさん :02/10/16 17:48
つまりプロセス終了時にミューテックスが自動的に解法されることを利用して

class ImNotOriginal
{
public:
 ImNotOriginal()
 {
  HANDLE hMutex = CreateMutex(NULL, FALSE, "このアプリケーションの名前");
 }
 ~ImNotOriginal(){}
 operator bool()
 {
  return (GetLastError() == ERROR_ALREADY_EXISTS);
 }
};

というコーディングは可能でしょうか?ということです
あ・・・これだとミューテックス生成そのものに失敗してもfalseになっちゃうのかな・・・

915 名前:デフォルトの名無しさん :02/10/16 17:56
我ながら阿呆だ・・・
1度しか呼ばれない事を前提にすれば

class ImNotOriginal
{
public:
 operator bool()
 {
  HANDLE hMutex = CreateMutex(NULL, FALSE, gc_AppName);
  DWORD result = GetLastError();
  return (hMutex == NULL || result == ERROR_ALREADY_EXISTS);
 }
};

これでいいのですね

916 名前:デフォルトの名無しさん :02/10/16 18:28
>>913
if(ImNotOriginal()) はまず ImNotOriginal() が評価され、コンストラクタが
呼ばれる。
次に、if は評価式に bool を要求するので、bool に型キャストされて operator bool()
が呼ばれる。
つまり、望み通りコンストラクタに続けて operator bool() が呼ばれるし、必ずそう動く
ものと見なして良いが、結果そうなるだけで言語レベルで保証しているという訳ではない。

>>915
そこまでひらめいたなら、関数化するべきだ。
クラスである意味は全く無い。

どーでもいーけど CreateMutex() って、lpName が "(゚Д゚)ハァ?" でも "\\" でも
"\r\n" でも "" でも成功するんだよなー。

917 名前:デフォルトの名無しさん :02/10/18 03:29
C++ってjavaとかperlに比べて標準/準標準ライブラリが貧弱すぎると思うんですが
私が知らないだけでしょうか。

libwwwとboostはつかってますがほかになんかいいのないですか?


918 名前:デフォルトの名無しさん :02/10/18 04:17
>>917
loki、common c++ libraryかなぁ…メジャーなのだと(cc++がメジャーかどうかはアレだが)。
欲しい機能に++とかCC付けて検索すると結構APIにヒットしたりするよ。socket++、socketCCとか、
pthreadCCとか。

CやC++は、基本的に「最低限は用意してるから、後は自分で用意しろや」ってスタンスが強いから、
自作するか他人様が作ったライブラリを求めてネットをさまようしかないだろうな。

919 名前:デフォルトの名無しさん :02/10/18 08:49
>>917
ACE, Blitz++, FC++ …などなど。
ライブラリじゃないけどflex/bisonとか。

920 名前:デフォルトの名無しさん :02/10/18 12:31
TRACEってなに?
文字を表示するもの?

921 名前:デフォルトの名無しさん :02/10/18 13:34
>>620
VCのデバッグ窓に文字列を表示・・ジャネーノ?
#二重起動云々はVCスレでやってほしいのう

922 名前:男子高校生 :02/10/18 14:44
クラスとその周辺の設計ムズイんだけどー
実用的に汎用にすんのが辛いね。

923 名前:デフォルトの名無しさん :02/10/18 15:55
>>922
激しく汎用化してしまえ。






マジレスするとそういのうは経験が必要だから、とりあえず適当に組むべし。
そのうち慣れるよ。

924 名前:デフォルトの名無しさん :02/10/18 20:26
激しくgenerativeに書け
自分さえも読めない罠にはまって射精するのが漢


925 名前:デフォルトの名無しさん :02/10/18 20:28
UNIXで、socketのselectだけできりゃいいんですけど、BSD系のライセンスで
シンプルなwrapper libraryないですかねえ。MT不要、fork不要、realtime signal なぞぜんぜんいらない。

自分で書けってか。




926 名前:デフォルトの名無しさん :02/10/18 20:30
>>924
コメントぐらい書けってば!

927 名前:デフォルトの名無しさん :02/10/18 20:56
>>926
それじゃ射精できないだろう!


928 名前:デフォルトの名無しさん :02/10/18 21:59
(・∀・) オナーニ!!

     ∧_∧____ エッ
    Σ (*゚−゚) ./\
  /| ̄〇〇 ̄|\/
    |__しぃ++.__|/
.     ̄ ̄ ̄ ̄

929 名前:デフォルトの名無しさん :02/10/18 23:15
これってどう?

inline string &operator<<(string &Str, char AddStr) { return Str += AddStr; }
inline string &operator<<(string &Str, const char *AddStr) { return Str += AddStr; }
inline string &operator<<(string &Str, string &AddStr) { return Str += AddStr; }

930 名前:3たび :02/10/18 23:19
>>929いらん

TC++PL3rdや>>3のFinal Draftにある文法に
member-declaration
 :decl-specifier-seqopt member-declarator-listopt ;
 |function-definition ;opt
 |::opt nested-name-specifier templateopt unqualified-id ;
 |using-declaration
 |template-declaration
 ;
という部分がありますが上から三番目は何に使われてますか?



931 名前:デフォルトの名無しさん :02/10/18 23:47
>>930
文法を示されて、一瞬何の事かわからなかった。
すまん、stringは独自クラスではなくてstd::stringなのだが…。k94i
ostreamのように

 str1 << str2 << '(' << str3 << ")";

とかできればいいなと思ったの。
ちなみに上から三番目の第二引数はconst忘れ。

932 名前:930 :02/10/18 23:59
>>931
+=は自分で作れってこと?

933 名前:930 :02/10/19 00:03
ごめん勘違い。

934 名前:930 :02/10/19 00:06
わしの娘であるstringstreamでは不満ということかね?

935 名前:デフォルトの名無しさん :02/10/19 00:19
>>930
住人が同じであるいじょう何度聞いても答えは得られないと思われ
所詮2ちゃんはこの程度かと思いながら他のもっとましなところに行くことをおすすめする

936 名前:930 :02/10/19 00:25
>>935
じつはすでに2chはこの程度かと思っているが、
comp.lang.c++などで聞く気にもなれず自分はこの程度かとも思っている。

937 名前:931 :02/10/19 00:45
>>934
何か大げさだなと思って。

938 名前:930 :02/10/19 01:00
>>937
所詮、平民出のプログラマには、stringのような田舎娘がお似合いということね!


939 名前:937 :02/10/19 01:24
>>938
タカビーな貴族娘に用は無い!

940 名前:939 :02/10/19 01:26
E-mail 設定し直すの忘れたよ・・・938 スマソ。
「Cから見ればstringも充分アレだし」 と書きたかった。

941 名前:930 :02/10/19 03:20
comp.lang.c++も
void main()
で盛り上がってた。

942 名前:デフォルトの名無しさん :02/10/19 03:38
voidタンは?

943 名前:スーパー初心者 :02/10/19 12:10
ムーテックスってなに?

944 名前:デフォルトの名無しさん :02/10/19 12:12
(´ゞ)←これ

945 名前:デフォルトの名無しさん :02/10/19 13:22
#if abc
#error (・∀・)
#endif

abcと同名のシンボルは無いはずだけど全ての処理系で通る(falseで)!
大ハケーン?

946 名前:デフォルトの名無しさん :02/10/19 13:24
つかmankoでもchinkoでも何でもOKっぽよ!?(奇跡)

947 名前:デフォルトの名無しさん :02/10/19 13:27
ぽよ→ぽいよ

948 名前:デフォルトの名無しさん :02/10/19 13:31
>>946
何が。

949 名前:デフォルトの名無しさん :02/10/19 13:40
#ifdef と勘違いしているだけだ


とマジレスしてみるテスト

950 名前:デフォルトの名無しさん :02/10/19 14:00
ポインタ型に対する const 指定の説明なのだが、

例えばポインタ演算 **p の結合規則は右から左なので、(*(*p)) と同じだ。
それと同様に考えればいい。
つまり、char const * p; は char (const (* p)); で、p そのものは変更できるが
*p が指すものは変更できない。
逆に、char * const p; は char (* (const p)); で、p そのものは変更できないが
*p が指すものは変更できる。
そして、char const * const p; は char (const (* (const p))); であり、これは
p そのものも *p が指すものも変更できない。
なお、const char * p; は char const * p; と全く同一である。

でよろしいか?

951 名前:デフォルトの名無しさん :02/10/19 14:00
次スレの予感

952 名前:デフォルトの名無しさん :02/10/19 14:15
>>950
よろしい

953 名前:デフォルトの名無しさん :02/10/19 14:19
>>950
次スレおながい。

954 名前:950 :02/10/19 14:43
>>952
ありがとう。

>>951 >>953
これでいい?

C++相談室 part12
http://pc3.2ch.net/test/read.cgi/tech/1035005882/

次スレの 4・・・あんた速えーよ・・・。

955 名前:デフォルトの名無しさん :02/10/19 14:49

  まもなくここは 乂千取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 0x03E8 取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

956 名前:Hikky! :02/10/19 17:03
(;゚Д゚)∩ < なら俺は01747を取りに逝くぞモルァ!

957 名前:デフォルトの名無しさん :02/10/20 14:56
957!!


958 名前:Hikky! :02/10/20 17:10
957+1!

959 名前:デフォルトの名無しさん :02/10/20 17:54
++ 957 ++;

960 名前:デフォルトの名無しさん :02/10/20 21:48
960

961 名前:デフォルトの名無しさん :02/10/20 22:43
957+4!

962 名前:デフォルトの名無しさん :02/10/20 23:39
957+1+1+1+1+1!

963 名前:デフォルトの名無しさん :02/10/21 00:12
BOOST_PP_INC(962);

964 名前:アフォルトの名無しさん :02/10/21 00:35
>>959
コンパイルエラー

965 名前:アフォルトの名無しさん :02/10/21 00:42
long *p = (long *)0x03C0;
p++;
printf("%d", (char *)p + 1);

966 名前:アフォルトの名無しさん :02/10/21 00:43
>>964
注意力が足りなかった

967 名前:デフォルトの名無しさん :02/10/21 23:03
char _[967];
get = sizeof(_);

968 名前:デフォルトの名無しさん :02/10/22 23:07
2*22*22

969 名前:デフォルトの名無しさん :02/10/23 00:20
#include <iostream>

for (int i = 0 ; i < 969 ; ++i) {
std::cout << "(・∀・)マンコ!!" << std::endl;
}

970 名前:デフォルトの名無しさん :02/10/23 00:42
>>969
なに?そのださいプログラムは。

971 名前:デフォルトの名無しさん :02/10/23 01:07
>>970
プログラムというよりただのシークエンスという気がする。
間違いなくコンパイル通らないだろうし。

972 名前:デフォルトの名無しさん :02/10/23 01:16
>>971
マラにオマンコキモチイイ!

973 名前:デフォルトの名無しさん :02/10/23 01:50
throw itteyoshiException(util::make_container<vector, int>() << 969 << 972);

974 名前:デフォルトの名無しさん :02/10/23 02:07
make_containerって何だよ。Java厨の出張?


975 名前:デフォルトの名無しさん :02/10/23 03:23
#include <iostream>

int main(int argc, char** argv)
{
for (int i = 0 ; i < 975 ; ++i) {
std::cout << "(・∀・)ティンポ!!" << std::endl;
}

return 0;
}


976 名前:Hikky! :02/10/24 16:57
_____ 
|\     \ 
| | ̄ ̄ ̄ ̄|
| |  ´∀` | ヒキコもこもこ引き篭もり〜♪
| |    鬱  |
\|____|  
  人  Y    
 し (_)     

977 名前:デフォルトの名無しさん :02/10/24 22:30
>>976
楽しそうだな

978 名前:デフォルトの名無しさん :02/10/25 16:07
cout<<"CountDown! : "<<1000 - __LINE__<<endl;

979 名前:デフォルトの名無しさん :02/10/25 18:12
http://store.yahoo.co.jp/i879/ys979.html

980 名前:デフォルトの名無しさん :02/10/25 18:37
スマートポインタっていっても下のようにいろいろあるわけだけど、

std::auto_ptr ( Standerd C++ Library )
boost::sheard_ptr ( Boost )
Loki::SmartPtr ( Loki )
YTL::smart_ptr ( Yaneura Game SDK 3rd )

みんなは、どれを一番使ってるよ?
ほかにも、イイのがあったら教えてくれ。

981 名前: ◆hMJAPH9PWA :02/10/25 22:09
普通はboost::shared_ptr<>, boost::weak_ptr<>, boost::scoped_ptr<> およびその配列版だと思うが。


982 名前:デフォルトの名無しさん :02/10/25 22:14
std::auto_ptrはスマートポインタじゃなかったような気が

983 名前:デフォルトの名無しさん :02/10/25 23:02
>>980

Loki のスマートポインタは、いろいろいじれるから、
趣味や勉強にはいいかも。
個人的には期待大

やねうらお の smart_ptr は、面白いけど、どれだけ使う場面があるかは微妙。


やっぱ Boost か。


 

984 名前:デフォルトの名無しさん :02/10/25 23:05
CComPtrとか書いたらしばかれますか?

985 名前:デフォルトの名無しさん :02/10/26 12:07
fifteen response

986 名前:デフォルトの名無しさん :02/10/26 15:09
YTL::oreno_nikubouwo_sakuratanni_buchikomu_haxahaxa_ptr

987 名前:デフォルトの名無しさん :02/10/27 14:57
the rest: thirteen

988 名前:デフォルトの名無しさん :02/10/27 15:12
早期梅。

989 名前:デフォルトの名無しさん :02/10/28 10:47
今日も梅。

990 名前:デフォルトの名無しさん :02/10/28 12:22
ten

991 名前:デフォルトの名無しさん :02/10/28 12:22
´-`).。oO(激しく上げちゃった…やばい)

992 名前:デフォルトの名無しさん :02/10/28 13:02
記念パピコV(^o^)V

993 名前:名無しさん@カラアゲうまうま :02/10/28 14:28
梅v(^・^)v梅

994 名前:デフォルトの名無しさん :02/10/28 15:34
埋め立て中

995 名前:名無しさん :02/10/28 18:54
記念カキコ

996 名前:デフォルトの名無しさん :02/10/28 20:37
ageちゃったりなんかして

997 名前:ぉながいします :02/10/28 20:39

0〜99の数字を1秒間隔で表示。1〜9で改行、表示する
こんな感じです

1 2 3 4 5 6 7 8 9
10 11 12〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜省略〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜99

これのプログラムを教えてください
よろしくお願いします


998 名前:デフォルトの名無しさん :02/10/28 20:41
ってもうスレねーーーー

999 名前:デフォルトの名無しさん :02/10/28 20:43
おれ

1000 名前:名無しさん :02/10/28 20:43
999ゲットズザー


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.