标题可能会引起误解,但我真的不知道如何命名。

假设我有以下结构

template <typename T>
struct SillyBase{
   void doFunnyStuff(vector<T> vec){
        dummyField = T();
        for(int i=0; i<10; i++)
            vec.push_back(dummyField++);
    }
    T dummyField;
 };

struct A : public SillyBase<char>{};

struct B : public SillyBase<float>{};

现在让我们进一步假设我有一个指针
ISillyBase* ptr;

它指向SillyBase的DECENDANT类(A或B)的对象-但是,我不知道哪个对象(我只知道它是A或B);

我可以通过任何方式调用doFunnyStuff()吗?

也许像这样:
vector<dynamic_generic_type_of(ptr)> vec;
ptr->doFunnyStuff(vec);

谢谢!

最佳答案

在您的示例中,您不能使用SillyBase*,因为SillyBase定义为

template <typename T> struct SillyBase {...}

因此,您需要提供类型...

另一个问题是,您将vector<T>的副本传递到doFunnyStuff()中,然后填充它...这似乎不正确,因为当该方法返回时,您丢失了vec,这应该是引用vector<T>&吗?

10-07 19:52