Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override syntax, specialized template method that returns a pointer to a fixed size array

Where should i put the override keyword?

Eclipse indexer throws an error in one example and my compiler with the second example.

Base class:

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

Derived class:

Example 1) Eclipse error. Compiler OK

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

Example 2) Eclipse Ok. Compiler error

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

Edit: The stack-overflow syntax highlighting also doesn't recognize override as a keyword.

like image 581
vuko_zrno Avatar asked Dec 05 '25 02:12

vuko_zrno


1 Answers

Suggestion:

Make your life easier with judicious use of using (or 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();
}

But to answer your specific question:

#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

like image 151
Richard Hodges Avatar answered Dec 07 '25 17:12

Richard Hodges



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!