c++boost.gif (8819 bytes)HomeLibrariesPeopleFAQMore

Reference

Definitions

  • 引数型 Arg1, Arg2, ..., ArgN と戻り値型 ResultType に対して、該当する以下の関数がウェルフォームドな時、関数オブジェクト f互換性がある という。

      // ResultType が void 以外の場合
      ResultType foo(Arg1 arg1, Arg2 arg2, ..., ArgN argN)
      {
        return f(arg1, arg2, ..., argN);
      }
    
      // ResultType が void の場合
      ResultType foo(Arg1 arg1, Arg2 arg2, ..., ArgN argN)
      {
        f(arg1, arg2, ..., argN);
      }
    

    メンバ関数ポインタには、特別な規定がある。メンバ関数ポインタは関数オブジェクトではないが、 Boost.Function は内部的にメンバ関数ポインタを関数オブジェクトに作り変える。 R (X::*mf)(Arg1, Arg2, ..., ArgN) cv-quals の形のメンバ関数ポインタは、以下のように関数呼出し演算子をオーバロードした関数オブジェクトに作り変えられる。

      template<typename P>
      R operator()(cv-quals P& x, Arg1 arg1, Arg2 arg2, ..., ArgN argN) const
      {
        return (*x).*mf(arg1, arg2, ..., argN);
      }
    

  • F が関数ポインタであるか、 boost::is_stateless<T> が真の時、 F 型の関数オブジェクト f状態を持たない という。状態を持たない関数オブジェクトの Boost.Function での構築/コピーは発生せず、例外は起きず、記憶域の割り当ても起きない。

namespace boost {
  class bad_function_call;
  class function_base;
  template<typename R, typename T1, typename T2, ..., typename TN, 
           typename Allocator = std::allocator<void> > 
    class functionN;
  template<typename T1, typename T2, ..., typename TN, typename Allocator> 
    void swap(functionN<T1, T2, ..., TN, Allocator>&, 
              functionN<T1, T2, ..., TN, Allocator>&);
  template<typename T1, typename T2, ..., typename TN, typename Allocator1, 
           typename U1, typename U2, ..., typename UN, typename Allocator2> 
    void operator==(const functionN<T1, T2, ..., TN, Allocator1>&, 
                    const functionN<U1, U2, ..., UN, Allocator2>&);
  template<typename T1, typename T2, ..., typename TN, typename Allocator1, 
           typename U1, typename U2, ..., typename UN, typename Allocator2> 
    void operator!=(const functionN<T1, T2, ..., TN, Allocator1>&, 
                    const functionN<U1, U2, ..., UN, Allocator2>&);
  template<typename Signature, typename Allocator = std::allocator<void> > 
    class function;
  template<typename Signature, typename Allocator> 
    void swap(function<Signature, Allocator>&, 
              function<Signature, Allocator>&);
  template<typename Signature1, typename Allocator1, typename Signature2, 
           typename Allocator2> 
    void operator==(const function<Signature1, Allocator1>&, 
                    const function<Signature2, Allocator2>&);
  template<typename Signature1, typename Allocator1, typename Signature2, 
           typename Allocator2> 
    void operator!=(const function<Signature1, Allocator1>&, 
                    const function<Signature2, Allocator2>&);
}
Last revised: February 19, 2003 at 22:46:09 GMTCopyright © 2001-2003 Douglas Gregor