閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

融通が利かないなぁと思うところ

まぁ当たり前のことなのですけれど……。

1

std::vector<float> x;
std::transform(x.begin(), x.end(), x.begin(), std::log); // error

log はオーバーロード関数なので、どの関数を呼ぶべきかコンパイラが判断できずにエラーになってしまいます。しかし、 int を渡しているならわかるのですが、このくらいならなんとかしてほしいなと思ってしまいます。

キャストしたり logf 関数を使うなどすることで回避できます。

2

void f(int* ptr) {}

int main()
{
    boost::function<void(int*)> func = boost::bind(f, 0); // error

    return 0;
}

普通の関数呼び出し f(0) であれば 0 はポインタとして解釈してくれるのですが、 bind をかますと int になってしまうようです。

void f(int* ptr) {}

int main()
{
    int* null = 0;
    boost::function<void(int*)> func = boost::bind(f, null);

    return 0;
}

などとしなければなりません。これは nullptr ができれば解決するのかな? (よくわかってません)