【问题标题】:Passing a pointer type as a template parameter将指针类型作为模板参数传递
【发布时间】:2015-07-09 13:15:25
【问题描述】:

以下代码

#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,将显示此错误:

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

如何从Abstract&lt;int*&gt;派生?

【问题讨论】:

    标签: c++ templates pointers


    【解决方案1】:

    像这样声明Concrete

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

    问题是:Abstract&lt;int*&gt;::f()的参数的哪一部分是const

    答案:由于Tconst 并且Abstract&lt;int*&gt; 中的T 是一个指针(指向int),所以它是指针const - 而不是int

    【讨论】:

      【解决方案2】:

      你想要这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        相关资源
        最近更新 更多