Question: I have been using Loki's Functor for a while and I recently asked a [question](https://stackoverflow.com/questions/20599849/lokis-functor-with-variadic-templates) about it (still unanswered...)
I have been told to use std::function, but I prefer Loki's implementation of Functor since it also work with all sorts of pointers as parameters (e.g. std::shared\_ptr).

```
struct Toto
{
    void foo( int param )
    {
        std::cout << "foo: " << param << std::endl;
    }
};

int
main( int argc, const char** argv )
{
    std::shared_ptr<Toto> ptr = std::make_shared<Toto>();

    Loki::Functor<void, LOKI_TYPELIST_1(int)> func( ptr, &Toto::foo );

    func(1);
}

```

Is there a way to do so with std::function ?

Answer: 
If you don't want to use `std::bind`, an option is to use a lambda function, resulting in even smaller code and I personally find it more intuitive:

```
auto func = [&ptr](int p){ ptr->foo(p); };

```

or without `auto`:

```
std::function<void(int)> func = [&ptr](int p){ ptr->foo(p); };

```

But this only works if the function to be called is fixed (i.e. `&Toto::foo` was not passed dynamically). If not, it's still possible with a lambda but you need a slightly different syntax and `std::bind` might be more attractive again.
Use `std::bind`.

```
struct Toto
{
    void foo( int param )
    {
        std::cout << "foo: " << param << std::endl;
    }
};

int main() {
    std::shared_ptr<Toto> ptr = std::make_shared<Toto>();
    std::function< void(int) > func( std::bind( &Toto::foo,
        std::bind( [ptr] () { return ptr.get(); } ),
        std::placeholders::_1
    ) );

    func( 1 );
}

```

[Live demo.](http://ideone.com/DJ5Yvf)

Edit: The inner `bind` with a lambda expression is actually unnecessary, but I'll just leave this here as illustrative of more advanced usage.