0

如何覆盖子类中的基本模板化类方法(即具有非模板方法的模板类)?

#include <Windows.h>
#include <iostream>

struct S{};

template <typename T>
class Base
{
public:
    Base()
    {
        Init(); // Needs to call child
    }

    virtual void Init() = 0; // Does not work - tried everything
    // - Pure virtual
    // - Method/function template
    // - Base class '_Base' which Base extends that has
    //      pure virtual 'Init()'
    // - Empty method body
};

class Child : public virtual Base<S>
{
public:
    virtual void Init()
    {
        printf("test"); // Never gets called
    }
};

int main()
{
    Child foo; // Should print "test"

    system("pause");
    return 0;
}

我知道将子类类型作为模板参数传递给基类然后使用 a 的技术static_cast,但它对我来说太不干净了,因为它应该非常容易。

我确信模板背后有一些我只是没有掌握的基本思想,因为我已经搜索了几个小时,但找不到任何代码或解决方案来解决这个特定的场景。

4

1 回答 1

3

从构造函数调用virtual方法是个坏主意,因为它没有得到您期望的行为。当 的构造函数Base执行时,对象还没有完全构造,还不是一个Child.

在构造函数之外调用它会起作用。

于 2012-09-24T09:34:01.757 回答