Je suis en train d'encapsuler une API C existante pour la rendre plus facile à utiliser dans mon programme VS2008 C++. L'API C attend un tableau de structures "TABLE_ENTRY" qui incluent un pointeur de fonction comme dans le code ci-dessous. Mais j'ai du mal à stocker un pointeur sur une fonction membre dans le pointeur de fonction. Quelqu'un peut-il signaler ce que je peux faire mal?stockage d'un pointeur sur une fonction membre
Merci, PaulH
Mon code ressemble essentiellement comme suit:
struct TABLE_ENTRY; // forward decl
typedef int (WINAPI *MYPROC)(DWORD msg, TABLE_ENTRY* entry);
struct TABLE_ENTRY {
const char* description;
DWORD value;
MYPROC callback;
};
class MyClass
{
public:
MyClass() : description("Some Description"),
some_value(1)
{
};
int MyProc(DWORD msg, TABLE_ENTRY* my_entry)
{
return 0;
};
TABLE_ENTRY* operator*()
{
entry_.description = description.c_str();
entry_.value = some_value;
// error C2440: '=' : cannot convert from 'boost::_bi::bind_t<R,F,L>' to 'MYPROC'
entry_.callback = boost::bind<int>(&MyClass::MyProc, this);
return &entry_;
};
TABLE_ENTRY entry_;
std::string description;
DWORD some_value;
};
class MyClassCollection
{
public:
TABLE_ENTRY* GetTable()
{
// is this okay or is it Evil & wrong?
return (&collection_.front())->operator*();
};
void Add(MyClass& my_class)
{
collection_.push_back(my_class);
}
private:
std::vector<MyClass> collection_;
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClass class1;
MyClass class2;
MyClassCollection collection;
collection.Add(class1);
collection.Add(class2);
TABLE_ENTRY* table = collection.GetTable();
TABLE_ENTRY entry1 = table[ 0 ]; // should be class1's table
TABLE_ENTRY entry2 = table[ 1 ]; // should be class2's table
return 0;
}
au lieu de 'MYPROC', vous voulez utiliser le type' boost :: function '; –
Votre utilisation de la surcharge de l'opérateur est mauvaise, d'ailleurs. – GManNickG
@Johannes: et ensuite le donner à C API? –