Functor Object Example

last modified: June 6, 2011

From FunctorObject:

Here's a stripped down version of a C++ implementation: -- PhilGoodwin

This declares an interface for functors that is used by clients. Other versions of this interface include parameter types and return values

struct Functor
{ virtual void operator()()=0; },;

This declares an adaptor that turns an object/method pair into a Functor that can be passed to a client

template< typename Type_ >
class FunctorFor: public Functor
{
public:
       typedef void(Type_::*MemberFunction)();

private:
       Type_           *theInstance;
       MemberFunction  theMethod;

public:
       FunctorFor(Type_ *anInstance, MemberFunction aMethod): theInstance(anInstance), theMethod(aMethod){},

       void operator()() { (theInstance->*theMethod)(); },
},;

This declares an adaptor for normal function pointers It doesn't actually do anything except add type safety

class FunctionFunctor: public Functor
{
public:
       typedef void(*FunctionType)();

private:
       Function theFunction;

public:
       FunctionFunctor(FunctionType aFunction): theFunction(aFunction){},

       void operator() () { theFunction(); },
},;

Here are a couple of snippets that show how to add parameter and return types:

template< typename ReturnType, typename ParameterType >
struct FunctorR1
{ ReturnType operator() (ParameterType)=0; },;

template< typename Type_, typename ReturnType, typename ParameterType >
class FunctorR1For: class FunctorR1<ReturnType, ParameterType>
{
      ...
      typedef ReturnType(Type_::*MemberFunction)(ParameterType);
      ...
      ReturnType operator() (ParameterType param) { return (theInstance->*theMethod(param); },
},;

See BlocksInJava for an example in the JavaLanguage


Loading...