首页 > 解决方案 > 重写语法,返回指向固定大小数组的指针的专用模板方法

问题描述

我应该把 override 关键字放在哪里?

Eclipse 索引器在一个示例中抛出错误,而我的编译器在第二个示例中抛出错误。

基类:

template<typename type, size_t N>
class Base<type[N]>
{
  virtual type const (& Get() const)[N];
};

派生类:

示例 1) Eclipse 错误。编译器OK

template<typename type, size_t N>
class Derived : Base<type[N]>
{
  virtual type const (& Get() const override)[N];
};

示例 2) Eclipse 好的。编译器错误

template<typename type, size_t N>
class Derived : Base<type[N]>
{
  virtual type const (& Get() const)[N] override;
};

编辑:堆栈溢出语法突出显示也不将覆盖识别为关键字。

标签: c++templatesoverridingeclipse-cdtiar

解决方案


建议:

明智地使用using(或typedef)让您的生活更轻松:

#include <cstddef>
#include <type_traits>

template<class T> class Base;

template<typename type, size_t N>
class Base<type[N]>
{
public:
    using array_type = std::add_const_t<type>[N];
    using array_reference = array_type&;

  virtual array_reference Get() const;
};


template<class Array>
class Derived : public Base<Array>
{
    using base_class = Base<Array>;
public:
    using array_reference = typename base_class::array_reference;

    virtual array_reference Get() const override;
};

int main()
{
    auto x = Derived<int[10]>();

    auto br = static_cast<Base<int[10]>&>(x);

    auto&& y = br.Get();
}

但要回答您的具体问题:

#include <cstddef>

template<class T> class Base;

template<typename type, size_t N>
class Base<type[N]>
{
public:
    virtual type const (& Get() const) [N];
};

template<class T> class Derived;

template<typename type, size_t N>
class Derived<type[N]> : public Base<type[N]>
{
public:
    virtual type const (& Get() const override)  [N] ;
};

int main()
{
    auto x = Derived<int[10]>();

    auto br = static_cast<Base<int[10]>&>(x);

    auto&& y = br.Get();
}

https://godbolt.org/g/q16ns7


推荐阅读