std::bind a static member function inside the class

13,305

The type of a pointer to static member function looks like a pointer to a non-member function:

auto storeFunc = std::bind ( (void(*)(WORD, WORD, double, bool))
                              &CSoundRouteHandlerApp::MakeRoute, 
                              sourcePort, destPort, volume, true );

Here's a simplified example:

struct Foo
{
  void foo_nonstatic(int, int) {}
  static int foo_static(int, int, int) { return 42;}
};

#include <functional>
int main()
{
  auto f_nonstatic = std::bind((void(Foo::*)(int, int))&Foo::foo_nonstatic, Foo(), 1, 2);
  auto f_static = std::bind((int(*)(int, int, int))&Foo::foo_static, 1, 2, 3);

}
Share:
13,305
S Grey
Author by

S Grey

Updated on July 23, 2022

Comments

  • S Grey
    S Grey almost 2 years

    I am trying to store a function to call later, here is a snippet.

    This works fine:

    void RandomClass::aFunc( int param1, int param2, double param3, bool isQueued /*= false */ )
    {
        /* If some condition happened, store this func for later */
        auto storeFunc = std::bind (&RandomClass::aFunc, this, param1, param2, param3, true);
    
        CommandList.push( storeFunc );
    
        /* Do random stuff */
    }
    

    However, if RandomClass is static, so I believe I should do this:

    void RandomClass::aFunc( int param1, int param2, double param3, bool isQueued /*= false */ )
    {
        /* If some condition happened, store this func for later */
        auto storeFunc = std::bind (&RandomClass::aFunc, param1, param2, param3, true);
    
        CommandList.push( storeFunc );
    
        /* Do random stuff */
    }
    

    But this doesn't work, I get the compile error

    error C2668: 'std::tr1::bind' : ambiguous call to overloaded function

    Any help appreciated.