c++ - Using std::function in member initialization list -


i have typedef:

typedef s32(imydataclass1::*getdatafunction_t)(void); 

and type:

struct functionmap_t {     std::vector<getdatafunction_t> pdatafunctiontable;     struct datarequestor_t datarequestor; }; 

i have member variable:

functionmap_t fnmap1; 

which set in member initializer list:

myclass::myclass() : fnmap1({   {      &imydataclass1::getdata1,      &imydataclass1::getdata2,      &imydataclass1::getdata3    },    datarequestor1  }) 

which use in constructor:

addnewfnmap(fnmap1); 

this works fine. unfortunately, it's not extendable function pointers different classes, getdatafunction_t bound pointers in imydataclass1

i tried using templates, ran issues not around. i'm trying use std::function, means change original typedef (i think):

typedef std::function<s32(void)> getdatafunction_t; 

what correct way set initializer list in situation? use std::bind here?

update: here attempt @ new initializer list. have no idea if correct, had right before posting question:

{    {     (std::bind(&imydataclass1::getdata1, functiontofetchcorrectobject())),     (std::bind(&imydataclass1::getdata2, functiontofetchcorrectobject())),     (std::bind(&imydataclass1::getdata3, functiontofetchcorrectobject()))   },   pgn65370 } 

you use lambda expressions. however, if want keep signature std::function<s32(void)>, you'll need capture object.

myclass::myclass() : fnmap1({   {      [this](){ return getdata1(); },      [this](){ return getdata2(); },      [this](){ return getdata3(); },   },   datarequestor1 }) 

if don't want this, change signature pass this pointer parameter callbacks. barry points out in comments, not allow put callbacks different classes same vector. reinterpret_cast pointer inside lambda besides being ugly , dangerous, how caller know pointer pass in?


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -