v-table index

  • Thread starter Alexander Zezulinsky
  • Start date
A

Alexander Zezulinsky

Hi, everyone

I can operate with pointer-to-member functions.
How can I get virtual member function index from v-table?
I would like to iterate v-table and to execute virtual method by v-
table index.

Is it possible?

CODE:
----------------------------------------------------------------------------------------
class ICollection
{
public:
virtual void SystemMethod_0() = 0;
virtual void SystemMethod_1() = 0;
virtual void SystemMethod_2() = 0;
virtual void SystemMethod_3() = 0;

/* pointer-to-member */
typedef void (ICollection::*fnMethod)();

/* get pointer-to-member by id */
virtual ICollection::fnMethod getMethodPtr(size_t nIndex) = 0;

/* ctor and virtual dtor */
ICollection() {}
virtual ~ICollection() {}
};

class CTest: public ICollection
{
public:
virtual void SystemMethod_0() {printf("SystemMethod_0");}
virtual void SystemMethod_1() {printf("SystemMethod_1");}
virtual void SystemMethod_2() {printf("SystemMethod_2");}
virtual void SystemMethod_3() {printf("SystemMethod_3");}

virtual ICollection::fnMethod getMethodPtr(size_t nIndex)
{
ICollection::fnMethod fnAction = NULL;
switch(nIndex)
{
case 0: fnAction =
(ICollection::fnMethod)&CTest::SystemMethod_0;break;
case 1: fnAction =
(ICollection::fnMethod)&CTest::SystemMethod_1;break;
case 2: fnAction =
(ICollection::fnMethod)&CTest::SystemMethod_2;break;
case 3: fnAction =
(ICollection::fnMethod)&CTest::SystemMethod_3;break;
default: assert(false);break;
}
return fnAction;
}

/* ctor and dtor */
CTest() {}
~CTest() {}
};

/* usage */
int main(int argc, const char* argv[])
{
ICollection* pCollection = new CTest();

ICollection::fnMethod fnAction = NULL;
for (size_t nIndex=0; nIndex!=4; ++nIndex)
{
/* I would like to get v-table index and execute method by v-table
index */
/* But I can operate only with pointer-to-memeber like
this */
fnAction = pCollection->getMethodPtr(nIndex);
(pCollection->*fnAction)();
}

delete pCollection;

return 0;
}
 
V

Vaclav Haisman

Alexander Zezulinsky wrote, On 21.5.2011 19:24:
Hi, everyone

I can operate with pointer-to-member functions.
How can I get virtual member function index from v-table?
I would like to iterate v-table and to execute virtual method by v-
table index.

Is it possible?
It is not. Instead, gather the member function pointers into your own array
and index into such array, if you really need to. Alternativelly, rethink
your design so that you do not need such thing at all.
CODE:
[...]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,481
Members
44,900
Latest member
Nell636132

Latest Threads

Top