【发布时间】:2018-03-06 03:36:19
【问题描述】:
所以我正在尝试使用 vtable 访问虚拟函数值。我理解的方式是编译器创建一个指向vtable的指针,并为每个包含虚函数的类创建一个vtable。我能够获得前两个成员的值。现在我不明白如何获取'bar'函数的值。
#include <cstdio>
#include <iostream>
class Thing
{
private:
int x;
int y;
virtual int foo()
{
return x+y;
}
virtual int bar()
{
return x*y;
}
public:
Thing(){
x = 2;
y = 10;
}
};
int extract_x(void *thing)
{
// --- Begin your code ---
char* ptrA = (char*)thing;
ptrA=ptrA+8;
return *ptrA;
return 0;
// --- End your code ---
}
int call_bar(void* thing)
{
// --- Begin your code ---
// --- End your code ---
return 0;
}
int main()
{
Thing thing;
std::printf("%d %d\n",
extract_x(&thing),
call_bar(&thing));
return 0;
}
【问题讨论】:
-
你为什么要这样做?你想解决什么问题?
-
@einpoklum 尝试使用 vtable 调用“bar”
-
std 中没有任何东西要求 vtable/vptr 但每个实现都使用这些。 OTOH,vtable 布局取决于实现,以及 vptr 在对象中的放置(通常在开头)
-
"试图使用 vtable 调用 'bar'" 但是为什么呢?好像 C++ 不够成熟。