Boost C++ Libraryのお勉強その8

functionとかfunctionalとか紛らわしいんですが…。

Boost.Function

関数っぽいものを保持できるクラス。structの定義をmain()内に書いたらコンパイルできないのにちょっとハマった。

#include <iostream>
#include <boost/function.hpp>

struct pow4
{
    int operator() (int x) const { return x * x * x * x; };
};

int main(void)
{
    boost::function<int (int x) > fun;
    fun = pow4();
    std::cout << fun(4) << std::endl;
    return 0;
}
256

Boost.Function_Types

関数の型チェックとか色々。

#include <iostream>
#include <boost/function_types/is_function_pointer.hpp>

int main(void)
{
    std::cout << boost::function_types::is_function_pointer < int (*) (void) >::value << std::endl;
    return 0;
}
1

Boost.Functional

STLのやつを拡張したもの。

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <boost/functional.hpp>

int main(void)
{
    std::string s = "abcdef@";
    std::cout << *std::find_if(s.begin(), s.end(), boost::not1(isalpha)) << std::endl;
    return 0;
}
@