这是我的问题的抽象。
我想开发这样的东西。
class Base {
}
template<typename T>
class TypedBase : Base {
f(const T& input);
}
现在我想通过基指针访问 TypedBase 类的“家族”并调用 f。
像这样的东西
Base* base_ptr;
if (condition) {
base_ptr = new TypedBase<double>();
} else {
base_ptr = new TypedBase<int>();
}
// Int and double are just examples to get the idea
// Then I Want to call
base_ptr->f(4);
这不会编译。
我尝试向基础添加一个空的虚函数 f(),希望 vtable 能够在运行时负责调用正确的 f() 与 f(T& 输入),但同样不能像这样工作:
class Base {
virtual f() = 0;
}
那么你是怎么做到的呢?一般来说,我想要一个指向通用 TypedBase 的指针,它允许我通过指向族的通用指针调用 f(...) 。有什么想法吗?
我当然可以这样做:
class Base {
// Repeat for every typename
virtual f(int& x) = 0;
virtual f(double& x) = 0;
}
然后每个 TypedBase 将只实现其中一个,因此我仍将在运行时获得类型安全,而无需在代码中进行动态检查。但是,如果我有 N 个要调用的函数和 M 个要使用的类型,那么我将不得不将 M*N 抽象函数添加到 Base 类中。有更好的解决方案吗?