将指针类型作为模板参数传递

时间:2015-07-09 13:15:26

标签: c++ templates pointers

以下代码

#include <iostream>

template<typename T>
class Abstract
{
public:
    virtual ~Abstract()
    {}
    virtual void func(const T &param) const = 0;
};

class Concrete : public Abstract<int*>
{
public:
    virtual void func(const int *&param) const override  // watch out!
    {}
};

int main()
{
    Concrete c;
}

在标记为注释的行上生成以下编译错误:

  

错误C3668:'Concrete :: func':具有覆盖说明符'override'的方法未覆盖任何基类方法

如果我删除了override,则会显示以下错误:

  

错误C2259:'具体':无法实例化抽象类

如何从Abstract<int*>派生?

2 个答案:

答案 0 :(得分:4)

像这样声明Concrete

class Concrete : public Abstract<int*>
{
public:
    virtual void func(int * const &param) const override
    {}
};

问题是:Abstract<int*>::f()参数的哪一部分是const

答案:由于TconstT中的Abstract<int*>是指针(指向int),因此它是指针{ {1}} - 不是const

答案 1 :(得分:1)

你想要这个:

virtual void func(int * const &param) const override  // watch out!