一个类可以专门化一个模板类并同时从它继承吗?

时间:2016-06-04 00:20:31

标签: c++ polymorphism

假设我有一个模板基类,如下所示:

template <typename T>
class Base
{
    public:
         virtual void somefunc() =0;
};

我想创建一个具体的派生类,当然我需要实现somefunc。我可以这样做:

class Derived : public Base<int>
{
    public:
        virtual void somefunc() { std::cout << "hello\n";}
        void otherfunc() {std::cout << "Hello\n";}
};

但是,当我尝试通过Boost Python将这些东西暴露给Python时,这会产生烦恼。尽管我在这里只定义了两个类BaseDerived,但我需要将Base<int>显式地公开给Python,即使我永远不会实例化它。我想知道的是,有什么方法可以在我实例化它的同时从模板类继承?基本上,我可以将Base视为Base的派生类吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Base<int>

创建代表typedef的类型
typedef BaseInt Base<Int>;

您应该可以使用BaseInt但是要将信息导出到Boost Python。

答案 1 :(得分:0)

如果您不需要接口类,则可以专门化模板。

// No definition required
template <typename T>
class Base;

// Specialization
template <>
class Base<int> {
    public:
        virtual void somefunc();
        void otherfunc();
}