抽象类通过模板化的虚拟函数访问实现的类型
Abstract class accessing the implemented type through a templated virtual function?
我想知道是否有任何方法可以在抽象类中编写模板函数,并使用派生类的类型自动实例化它(模板函数)?
所以你有一个类看起来像这个
class A
{
virtual template < typename T>
void vtfunc(void)
};
class B : public A
{
/// No declared members pertaining to this example
}
然后,每当声明从a派生的类时,它都会编译"vtfunc",并将其自身作为模板参数T。然后,通过A的接口调用vtfunc(),调用为其派生类B编译的函数的属性。
有没有什么方法可以做到这一点,或者写一些有这种效果的小东西?
显然,我知道模板参数只会影响类的内部,而不会影响返回类型和参数——由于多态性的工作方式,它们需要相同。
我不确定你想要的是什么,但一个常见的模式是所谓的奇怪的重复模板模式;在这里,基类本身就是模板,而不是它的成员函数。换句话说:
template <typename T>
class A
{
virtual void vtfunc(void)
};
class B : public A<B>
{
…
};
请考虑使用非成员函数。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数