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


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

【初心者歓迎】C/C++室 Ver.68【環境依存OK】



1 名前:デフォルトの名無しさん [2009/09/17(木) 22:22:59 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.67【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1247937958/l50

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か   に置換しておくことをお勧めします。

545 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:12:00 ]
__GNUC_PATCHLEVEL__

546 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:04:03 ]
>>545
おおサンクス

そしたらこうすればいいのか

printf("%d.%d.%d", ___GNUC___, ___GNUC_MINOR___, __GNUC_PATCHLEVEL__);

547 名前:デフォルトの名無しさん [2009/10/09(金) 21:48:40 ]
質問です。

環境はVisual Studio.net 2003 C++

条件は列(9)の最後尾が○の場合、
後ろから●が見つかるまでの部分を
削除して表示する

***実行前***
○●●○○●●○○
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●○○●●
○●●


●○○●○○○○○
●○○○○○●○
○●●○

↓↓↓↓↓↓↓

●○○●
●○○○○○●
○●●




548 名前:デフォルトの名無しさん [2009/10/09(金) 21:49:38 ]
最大横9×縦11項目
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○  
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○○○○●○○

↓↓↓↓↓↓↓

●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○○○○●

このような感じで出力したい場合、どういった風に
実装すればいいでしょうか?

以上、よろしくお願いします。

549 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:59:53 ]
>>547
#include <stdio.h>
#include <string.h>

int main(void)
{
char buf[1024], *p, *q;

while(fgets(buf, sizeof(buf), stdin))
{
for(p=buf;(q=strstr(p, "●"));p=q)
{
q+=2;
printf("%.*s", q-p, p);
}
printf("\n");
}
return 0;
}

550 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:03:14 ]
MFC使っていいなら、

CStringW s = L"○○●●○○";
s.TrimRight(L'○');


551 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:28:16 ]
***実行前***
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●

ここがわからん。開始時に末尾が●ならそれは削除?

552 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:37:51 ]
2パスにするのが楽かな??
まず、左から右に一回配列を舐めて、最後に出てきた黒の場所思えておいて、2パス目で表示。
もちろん処理を多めに食うけど、確実じゃないかなぁ。

553 名前:デフォルトの名無しさん [2009/10/09(金) 22:43:40 ]
>>549
サンクス!!

>>550
サンクス!!

>>551
すまん、記述ミス

***実行前***
○●●○○●●○○
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●○○●●
○●●○○●●







554 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:15 ]
>>553
ん、そっか。ミスか。
じゃあ回答でおk

555 名前:デフォルトの名無しさん [2009/10/09(金) 22:51:09 ]
>>552
例えば、
for(int i=0; i<99;i++)
{
bool iMap[99] = getFunc( i );
}
これで○=1,●=0

ってなっていた場合どうする?

つまり、○ならオブジェクトが取得できていて、
●なら何も無い状態。





556 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:54:20 ]
>>555
それぐらいは自分で考えてくれ。

557 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:04:57 ]
>>555
即興だから間違ってたら申し訳ないが。
static const LineLen=99;
int LastBlack=LineLen;
bool Map[LineLen];
for(int i=0;i<LineLen;i++){//舐める1パス目
   Map[i] = GetFunc(i);
   if(Map[i]==false) LastBalck=i;
}
for(int i=0;i<LastBlack;i++){//表示。2パス目
   printf("%d",Map[i]);
}

っていう感じ。

558 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:09:14 ]
多分9*11で99要素なんだよ。
だから2重ループにするか、lastblackを11要素の配列にしないとだめだ

559 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:28:56 ]
>>557書いた後気づいた。読めてなかったなぁ。。。
>>558の案もあわせて採用するといいと思う。

size_t LastBlack(object* Array,size_t N){
    int Last=N;  
    for(size_t i=0;i<N;i++){
       if(Array[i]==false) Last=i; 
    }
    return Last;    
}
--呼び出し--
object obj[99];//どこかで中身設定。
size_t L;
for(size_t i=0;i<11;i++){
    L=LastBlack(obj+9*i,9);
    Show(obj+i*9,L);
}

って感じか??
2重ループになっちゃったな。。。
確実だが、頻繁に呼ぶにはちょっと重いかもね。。。
黒発見した時点でそれまでを描画すれば1パスでいけないこともないかも??

560 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:40:27 ]
だれも素直なstrrchrとかは勧めないのか
Unicodeだとしてもwcsrchrとかあったはずだし
最悪strrchrwがshlapi.hとかにあった気がするが

561 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:59:46 ]
自分の発言でグダグダになったので、フルソース書いてみた。
思っていたのとは別物になってしまった。変なこと書いて申し訳ないね。
#include <stdio.h>
#include <vector>
#include <algorithm>
int main(){
    std::vector<int> Array;
    size_t W=9,H=11,LD=0;
    Array.resize(W*H);
    srand(253);
    std::fill(Array.begin(),Array.end(),0);
    for(size_t i=0;i<Array.size()/4;i++){
        Array[i] = 1;
    }
    std::random_shuffle(Array.begin(),Array.end());
    for(size_t i=0;i<H;i++){
        LD = W;
        for(size_t j=0;j<W;j++){
            if(Array[j+W*i]==1) LD=j;
        }
        for(size_t j=0;j<=LD;j++){
            printf("%s",(Array[j+W*i] == 0) ? "○":"●");
        }
        printf("\n");
    }
    return 0;
}

562 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:21:05 ]
コンパイラの警告について質問です。
環境はVS2008Expressです。

先ほど2時間悩んだ末に発見した間違いがありまして、これを警告で表示してほしいなぁと思いました。
内容は
Hoge c;//Hogeはクラス
if (略) c = Hoge(0);
else Hoge(1);

というもので、elseの後ろは本来c = Hoge(1)とすべきところを、c=を忘れてしまいました。
気づいて直した後に、警告LV3なのが悪かった、4にしようと最高である4にしました。
期待としては

cが「初期化されていない可能性のあるローカル変数」として警告される。
Hoge(1)は無意味だ〜という警告(ただ、コンストラクタ内でグローバルな変数にアクセスする設計もありえるあるから、これは警告にはできないか・・・?)

のどちらかを期待したいたのですが、駄目でした。
前者は特に不思議なのですが、つかわれ方が
Honya(&c);
というポインタ引き渡しの場合には警告にならないようなのです。
(Honya(const Hoge *p)なので、constであるから警告になってもよさそうなものですけど…)

この(くだらない)ミスを再発しないためには、何か良い方法はあるでしょうか?

というつかわれ方をしていたせいで、警告がでませんでした

563 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:27:48 ]
>>562
Hoge c; って書いた時点でパラメータなしのコンストラクタで初期化さ
れてるんでは。





564 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:30:36 ]
>>562 おそらく無理
前者のcはコンストラクタが呼ばれるから初期化されているので警告は出ない。
後者のオブジェクトを作るだけという使い方も十分あるし文法上何の問題もない。

どうしてもというなら、フラグを作って何のメンバ関数も呼ばれずにデストラクタが呼ばれた場合はassertするくらいか。


565 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:37:36 ]
>>563-564
あー、なるほど
Hogeにはコンストラクタを書いていませんが、暗黙のコンストラクタが用意されるんでしたね…

Hogeはコンストラクタのいらない型なのですが、そこでなんとかできないでしょうか?
例えるならVectorデータ型みたいなもので
struct Hoge
{
float x, y, z;
};
相当の品なのです。
こういう構造体を「コンストラクタを無くし」て、「初期化されなかったときの利用で、警告が出るようにする」ためのオプションや修飾子はないでしょうか?


566 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:56:10 ]
>>565
Hoge C=式 ?Hoge(0):Hoge(1);


567 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:01:18 ]
デフォルトコンストラクタをprivateにして必ず565みたいにさせるとか。

568 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:31:28 ]
>>565

Hoge* c;
if (略) c = new Hoge(0);
else c = new Hoge(1);
scoped_ptr<Hoge> cptr(c);
Honya(cptr.get());

こんな感じにするかなあ。


569 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:24:28 ]
変数宣言と初期化を別にする限り防げないように思う

つまり
>>567のいうとおりデフォルトコンストラクタをprivateにして
>>566のいうような宣言と同時に初期化を必須にするしかないと思う

ただ>>566はコンパイラが馬鹿だとコピーコンストラクタが使用されそうだし
俺なら
Hoge C(式 ? 0 : 1);
って書きそう

570 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:29:22 ]
>>568
Vectorみたいな使い方と考えると
比較的プリミティブに近くて多く使われそうだし
毎回ヒープにアクセスさせるのは大仰な上に遅くなりそうじゃね?
マルチスレッドだったりしたら毎回排他制御が…

571 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:30:22 ]
汎用的に配列の要素数を返却するtemplate をこのように書いてみたのですが
期待している動作になりません、間違いを指摘してもらえませんか。

#include <iostream>

using namespace std;

template<class X>
int ArraySize(X* object)
{
 return (sizeof(object) / sizeof(X));
}

int main()
{
 int array[] = {1, 2, 9, 3, 4, 5 };
 cout << ArraySize(array) << endl; //配列array の要素数を取得したいのですが・・・
}


572 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:36:35 ]
>>566-570
真剣な検討ありがとうございます。

ポインタにするのは、ちょっと速度的にきつそうかなと思います。
570さんのおっしゃるとおり、プリミティブに近いものを想定していますので。

デフォルトコンストラクタをprivateにすると、
Hoge c;
とはできませんね。

(その方法で初期化を強要しつつ)初期化で条件式を使うのは確かによさそうですが、条件分岐が3つ以上の場合に無理がありそうですね。
書けなくはないですが・・・。

else Hoge(1);
のところで、「生成したクラスが使われていないようですが?」という警告があれば一番良いのですけどね…。
それを避けるためには、使ってないローカル変数への警告を抑える
(void)a;
と同じように、
(void)Hoge(1);
と書く。とか…。

573 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:38:34 ]
>>571
int ArraySize(X* object)
ここで、単なるポインタにしてしまった以上 sizeof(object)では大きさがとれませんよ。
sizeof(配列)で大きさが正しくとれるのは、それが配列宣言されており、コンパイラがサイズを知っているからです。
ポインタと配列は似て非なるもの



574 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:43:32 ]
template <class T, size_t N>
size_t GetArraySize(T (&)[N])
{
return N;
}

int array[] = {・・・};
cout << GetArraySize(array);

575 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:06:36 ]
>>571 です
>>573
>>574
ありがとうございます。
>ポインタと配列は似て非なるもの
そうですね、短絡的でした。
>>574
T (&)[N]
この書き方ですが、配列の宣言が、foo[N]このような書き方がしてある配列を参照しているという、ことなのでしょうか?
それから、
return N;
どうしてこれで要素数が取得できてしまうのでしょうか、不思議です?

576 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:09:41 ]
>>575 です
質問がまわりくどいですね
T (&)[N] と T &[N]
この違いを教えて頂けないでしょうか。

577 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:10:13 ]
foo[N]のNこそ、要素数でしょ?w

578 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:13:42 ]
>>577
あ、そうか!
わかりましたw
T (&)[N] と T &[N]
しかし、この違いがまだ理解できません・・・・orz

579 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:49:02 ]
構文解析のルールの詳しいことはよく理解してないけど

T [N] => Tの配列
T &[N] => Tへの参照の配列
T (&)[N] => T[N]への参照

となってる模様。ちなみに参照の配列はコンパイルできない
このへんは仮引数名の省略とか括弧の意味とかいろいろあって直感的には理解しにくいわ

580 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 11:35:26 ]
配列へのポインタと一緒だけど、演算子の優先順位が & より [ ] の方が高いから
T &a[N] は先に [ ] と結びついて a[N] つまり a は要素 N 個の配列
その個々の要素の型が T&
T (&a)[N] の場合は括弧で明示してあるために先に & と結びついて &a つまり a は参照
その参照先が要素 N 個の配列
関数の引数名は省略できるので、その場合 T a[N] は T [N] に、T (&a)[N] は T (&)[N] になる
というように俺は理解してる

581 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 11:41:45 ]
>>579
>>580
ありがとうございます、大変よく分かりました。

582 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:42:52 ]
stringstreamってどんな感じで実装されてるんでしょうかね?
stringみたいに内部で独自のメモリ管理方法を取ってるのか、vectorのようにベタな連続メモリなのか、それともまったく違うのか・・・

583 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:21:55 ]
宜しくお願いします。このコードをコンパイルしますと
error C2664: 'Point<T>::set' : 1 番目の引数を 'int' から 'int &' に変換できません。
参照を外すと、静的でないメンバ関数の呼び出しが正しくありません。となります。
どのように対処したらいいのでしょうか?
#include <iostream>
using namespace std;
template<class T>
class Point {
 template<class> friend class Point;
private:
 T x_; // x座標
 T y_; // y座標
public:
 Point();
 template <class U>
 Point(const Point<U>& r) : x_(r.x_), y_(r.y_){}
 Point(T x = T(), T y =T()) : x_(x), y_(y) {}
 void set(T& x, T& y);
};
template<class T>
void set(T& x, T& y)
{
 x_ = x;
 y_ = y;
}
int main()
{
 Point<int> ip(12, 34);
 Point<long> lp(ip);
 Point<int>::set(12, 34); // ここで当該エラー
 return 0;
}



584 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:26:49 ]
>>583です
補足というか、行数の関係で書けませんでした、環境はVS2005 です。

585 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:31:47 ]
ごめんなさい、スレを汚してしまいました
解決しましたというか・・・・tohoho情けない
× Point<int>::set(12, 34);
○ Point<int> set(12, 34);

586 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:04:28 ]
いいんだよ^^

587 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:14:26 ]
>583
void set(const T& x, const T& y) にする。

588 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 06:51:57 ]
>>585
set という変数を用意したいのか?
メンバ関数のsetを呼び出したいのかはっきりしろ。

589 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:34:28 ]
>>583
もしsetという名前のメンバ関数を呼び出したくて、しかもインスタンス
無しで呼び出したいのなら、そのメンバ関数はstaticでなければならない

590 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:37:55 ]
でもインスタンスがないと当然 this が無いから、x_とy_に代入しようと
するとエラーになるな

質問者はその当たりをはっきり質問するように

591 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:02:19 ]
>>583です
皆さん、フォローありがとうございます。今回のset は変数としての振る舞いを期待していました。



592 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:01:09 ]
strstrのように、あるメモリ領域から特定のバイト列を検索する標準関数は
あるでしょうか。VC++2008独自関数でもかまいません。
strchrに対するmemchrのようにmemmem?なんてのがあればいいんですけど。

593 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:26:50 ]
標準関数は無いと思うけど
もし何度もその探索を実行するなら
(\0終端の文字列と違い、長さがわかっているのだから)
BM法かなんかでの探索を自前で実装するのが良いんじゃないかね。

まあ1度しか使わないのなら、そんなことせずに
先頭文字を探してそこから比較する、いわゆる力任せ法でも充分だろうけどね。



594 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:34:09 ]
std::search() とか?

595 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:05:53 ]
traitsって何者なんですか?

596 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:11:55 ]
曲者

597 名前:デフォルトの名無しさん [2009/10/12(月) 11:42:45 ]
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string s("表示");
int i = s.find('\\');
cout << i << endl;
return 0;
}
これを実行すると、「1」と表示されますが、-1にするには
どうすればよいでしょうか?

598 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:56:51 ]
shift_jisを使わない

599 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:58:24 ]
>>597
string s("ひょうじ");

600 名前:597 [2009/10/12(月) 11:59:06 ]
自己解決しました。できないようです。
ml.tietew.jp/cppll/cppll_novice/thread_articles/78

601 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:45:42 ]
ソースをSJIS以外にしてコンパイル

602 名前:デフォルトの名無しさん [2009/10/12(月) 13:30:11 ]
すみません。

趣味で、VC++のMFCで、いろいろ作っているんですが、もう5年くらいやっていて
だいぶというかかなり本格的なものも作れるようになりました。
自分は文系なんでよく知らないのですが、プログラマに就職しようと思えばできるんでしょうか?

今の職場は単調作業なので、ちょっと刺激がほしいです。よかったら、転職しようとおもうんですが・・・どうでしょうか?

603 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:35:23 ]
プログラマ板で聞いてください



604 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:32:08 ]
>>602
貴方の人生こんな初心者スレで聞いて棒に振ってもいいんですか??

605 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:44:51 ]
関数ポインタの配列を使った関数呼び出しはc++ではどうやって実現させたらいいですか

606 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:47:56 ]
>>605
Cと何かちがったっけ??

607 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:48:10 ]
普通の関数はCと同じ。
クラスのメンバ関数の関数ポインタは手を出さないほうが身のため。

608 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:14:10 ]
初心者なので詳しく答えられる方だけ回答お願いします

609 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:15:19 ]
初心者なのできちんと説明できない人は口を出さないでください
イライラします

610 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:19:24 ]
初心者ならどんな回答も学ぶべきことがあるはずなのでありがたく思うべきです

611 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:20:50 ]
初心者なのぐぐれません。

612 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:21:32 ]
初心者なのでよみとれません。

613 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:23:43 ]
初心者なので日本語わかりません。



614 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:53:40 ]
それではboost.functionの説明を始めようか

615 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:10:08 ]
がんばってコード書いたのによくよく調べるとSTLとかBoostに同じしかも完全に上位のコードとかがあると泣けるんだがしかし

616 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:17:11 ]
頑張る前に調べような。そういうのが使える環境ならなおさらだ。

617 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:45:28 ]
そりゃ一回は調べるんだけど見逃してたりするんでさ

618 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:49:27 ]
コードを書いたことが明日への礎になる。

619 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:57:45 ]
中で何やってるのか全く理解できないようなコードを使ってトラブルと
どうにもならなくなるしな。

620 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:13:41 ]
>>615 それはいい勉強をしたと思え。
ただライブラリを使ってるだけよりいい経験を積んだんだ。


621 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:27:56 ]
・boostを眺める
・欲しい機能を見つける
・使ってみる
・boostを参照せずに同じ様な機能の縮小版を作ってみる
・挫折する
・boostはどうやってるんだろうと思いながらソースや解説をみて学ぶ

俺は大体こんなかんじで勉強になった functionとか

622 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:23:13 ]
連結リストを実装するのはCでよくある勉強だし、ポインタ完全制覇とか読むと実装したくなるしな。
それをSTLで既にあるじゃんとか言って馬鹿にする奴はいないだろ。

623 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:25:27 ]
そりゃまぁ勉強目的でやるんならね



624 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:32:21 ]
時には馬鹿にならないとやる気にならないこともある。
Boostにあるからいいかではなかなか重い腰が上がらない。

625 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:37:36 ]
namespaceでもprivateとかpublic使えればいいのに

626 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:50:49 ]
anonymous namespaceが近いんじゃない?

627 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:57:13 ]
>>625
staticメンバ関数で、それ専用のクラスを作るのはどうだろう。
気分的にちょっとアレだけど

628 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:05:07 ]
無名名前空間とはちょっとちがうかなぁ

namespace hoge {
private:
template <int n> struct is_even { static const bool value = n % 2 == 0; }; // インクルードしても外から使えないようにしたい

public:
template <int n> class fuga { static const int value = is_even<n>::value ? n : 0; 〜〜; };
}

みたいな感じで使いたい
仕方ないからnamespaceをclassかstructで置き換えてそれっぽいことはできてるんだけど
今度はusing namespaceが使えない・・・

629 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:30:43 ]
・規約でBoostを禁止しているプロジェクトにげんなりする。

630 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:46:06 ]
>>628
namespaceだと名前空間を汚す気があれば突破されてしまうが。

631 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 04:51:45 ]
静的関数のテンプレート関数版みたいなもんか。

クラステンプレートfugaの静的メンバ関数にはしたくなさそうだな。






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

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

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