日記だったり,備忘録だったり.

  • TODO

2006:05 06 07 08 09 10 11 12
2007:01 02 03 04 05 06 07 08 09 10 11 12
2008:01 02 03 04 05 06 07 08 09 10 11

blog/2008-11-19

HAL研プロコン2008

HAL研プロコン2008のページが公開されました.
プレエントリー完了.今年は石村さんに負けたくないなぁ


お名前:

blog/2008-11-18

出身小学校

ウェブサイトあるのか.
http://www.city-okayama.ed.jp/~momos/
プールがきれいな学校でした.


お名前:

blog/2008-11-14

やきいも

焼き芋をした.


お名前:

blog/2008-11-12

昨日はバイナリーの日だったらしい

http://slashdot.jp/sp/binary2008/
shinhさんの7つのキーワードの内4つはすぐに見つかった.
あと1つは見つけないと...(http://shinh.skr.jp/m/?date=20081111#p08 )

たぶん,7つ見つけると
Y* w* b* a*. R* i* f*.
かな.

5つ

あと b*とR*かな.


お名前:

blog/2008-11-11

別に返り値を教える構造体を用意するくらいなら

template<typename T>
struct IntDouble
{};

template<>
struct IntDouble<int>
{
    typedef double ReturnT;
    static ReturnT call(int d)
    {
        return (double)d;
    }
};
template<>
struct IntDouble<double>
{
    typedef int ReturnT;
    static ReturnT call(double d)
    {
        return (int)d;
    }
};

template <typename ArgT>
typename IntDouble<ArgT>::ReturnT wrapper(ArgT arg)
{
    return IntDouble<ArgT>::call(arg);
}

int main()
{
    double d = wrapper(0);
    int    i = wrapper(0.0);

    return 0;
}

かな.あきらかにタイプ数が増えててうーんですが.


お名前:

blog/2008-11-10

テンプレートの特殊化と返り値の判断とか

double int_double(int d)
{
    return (double)d;
}
int int_double(double d)
{
    return (int)d;
}

template <typename RetT, typename ArgT>
RetT wrapper(ArgT arg)
{
    return int_double(arg);
}

int main()
{
    double d = wrapper(0);   // error
    int    i = wrapper(0.0); // error
    return 0;
}

(実際のコードは,int_doubleの部分がクラスで,テンプレート引数の入力を省略したくてwrapperを書いた)
こんな感じのコードがあった時に,wrapperのRetTはどっちも明らかなのに
コンパイラはRetTの型が分からんとエラーを吐きます.どうにかならないのかな.

void wrapper(Argt arg, RetT&ret)

とかが一番楽な気がしますが,事情があってこれはできなくて.それで

#define WRAPPER(ARG) int_double(ARG)

とかやると上のコードはOKなんですが

struct Bracket{
    int operator[](int a){ return a;}
};
struct AddOne{
    int operator,(int a){return a+1;}
};
...
WRAPPER( Bracket()[AddOne(),10] );   // error
WRAPPER( (Bracket()[AddOne(),10]) ); // ok

みたいにC++では合法だけど,C的にはうさんくさい式をつっこめなくなって困ります. 何かテンプレートをうまく使うとうまくいかないのかな.
今回は,wrapperをオーバーロードして逃げました.

C:\Users\Naoki\AppData\Roaming\Microsoft\Windows\Network Shortcuts

Windows Vistaでこのフォルダの中にファイルとかフォルダを作ると
マイコンピュータの中に,作ったファイルとかが表示される.何だろこれ.

僕の場合は

rtrace.txtとやらが現れたので気付いたのですが,こんなところに保存しないで欲しいなぁ

返り値の推定

template<typename T>
struct Ret{};
template<>
struct Ret<int>{ typedef double Type;};
template<>
struct Ret<double>{ typedef int Type;};

template <typename ArgT>
typename Ret<ArgT>::Type wrapper(ArgT arg)
{
    return int_double(arg);
}

返り値を教えてあげる構造体を用意したらうまくいった.
元の方のコードはかなりスッキリしたので,まぁOKでしょうか.


お名前:

blog/2008-11-02

銀嶺祭にいってきます


お名前: