c++ - 在不知道使用的模板类型时使用模板类方法的任何方式(当你有一个基类的指针时)

标签 c++ templates

假设我有这个:

class A 
{
    virtual int Method2(){/*...*/}
};

template<typename T>
class B<T> : public A
{
public :
    virtual int Method1(){/*...*/}
    virtual int Method2(){/*...*/}
};

是否可以做类似的事情(这当然行不通...)?

A* a = ...;

B* b = dynamic_cast<B*>(a);

b->Method1();

谢谢

最佳答案

人们通常做的是有一个中介类。

class A { virtual ~A() {} };
class B : public A { virtual void method(); }
template<typename T> class C : public B {
    void method() { ... }
};

A* a = new C<int>();
if(B* b = dynamic_cast<B>(a)) {
    b->method();
}

这称为类型删除。然而,在这个系统中,A 并没有真正起到多大作用。

关于c++ - 在不知道使用的模板类型时使用模板类方法的任何方式(当你有一个基类的指针时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335623/

相关文章:

c++ - 作用域、数组和堆

android - 如何在没有android studio的情况下在linux上开发android应用程序?

c++ - 替换汇编指令会改变其他指令

c++ - 默认参数模板与可变参数模板 : what is the last template parameter?

c++ - 按函数名参数化模板 c++11

c++ - lodepng 正在向 cout 打印 `1`,如何阻止它?

C++ 模板函数。错误 C2440 : 'return' : cannot convert from '_FwdIt1' to '_FwdIt1'

c++ - 可以组合部分模板特化来生成隐式生成的共享代码路径吗?

C++,作为模板参数传递的成员函数

C++ - 具有多种参数类型的方法