我正在尝试在 C++ 中为一个项目实现一种反射形式。这个想法是你将带有标签的类注册到一个映射中作为一种模板,然后调用共享基类的 cloneNew 方法来实际创建你想要的对象。但是,当我尝试使用 va_list 来实现此功能时,我得到了奇怪的结果。问题代码是:
GameObject* SphereObstacle::cloneNew(const Vector& position, double charge, const Vector& dipole, ...)
{
va_list v1;
va_start(v1, dipole);
double radius = va_arg(v1, double);
va_end(v1);
return new SphereObstacle(position, charge, dipole, radius);
}
每次我尝试从 va_list 读取时,它都会返回一个巨大的值。它几乎看起来像是一个指针。我唯一的想法是问题是由于这是基类中虚拟方法的实现这一事实引起的,但我没有在网上找到任何表明这是问题的东西。我做错了什么?