c++ - 重写语法,返回指向固定大小数组的指针的专用模板方法
问题描述
我应该把 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;
};
编辑:堆栈溢出语法突出显示也不将覆盖识别为关键字。
解决方案
建议:
明智地使用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();
}
推荐阅读
- ios - 表格视图单元格内的阴影不起作用
- loops - MIPS:编写代码以要求用户输入并打印响应
- css - 如何将文本带到按钮的中心
- php - WooCommerce 送货方式插件 - 运费缓存?
- regex - Google 工作表中的正则表达式匹配以识别包含另一个工作表中的任何字符串的单元格
- c# - 无法将类型“Coordinate_data”隐式转换为“RandomNumber”
- android - Packagingoptions 如何与 Android App Bundle 配合使用
- r - 如何在 R 中的分箱数据之间找到统计显着性?
- image - SwiftUI 中 ScrollView 的图像大小限制是多少?
- mysql - 如何在 node.js 中连接到 AWS MySQL 数据库