c++ - 从 C++ 中的错误模板实例化继承

标签 c++ templates inheritance overriding instantiation

考虑以下代码:

struct Foo
{
    Foo operator+(const Foo &rhs) const;
    // notice lack of: Foo operator*(const Foo &rhs) const;
};

template <class T>
struct Bar
{
    T x, y;
    T add() const { return x + y; }
    T mul() const { return x * y; }
};

我有两个问题:

  1. 我可以继承自Bar<Foo>吗?并覆盖 mul()做一些有意义的事情?

  2. 我可以继承自Bar<Foo>吗?不覆盖 mul()如果我从不使用 mul()哪里?

最佳答案

  1. 当然
  2. 当然

模板实际上是一种智能预处理器,它们不是经过编译的。如果你不使用某些东西,你可以写出完整的(语法正确的)垃圾,即你可以继承自

template <class T>
struct Bar
{
    T x, y;
    T add() const { return x + y; }
    T mul() const { return x.who cares what-s in here; }
};

附言由于您的 + 运算符在 const 函数中使用,因此它也应声明为 const。

编辑:好的,不是所有的编译器都支持这个,下面是一个用 gcc 编译的编译器:

template <class T>
struct Bar
{
    T x, y;
    T add() const { return x + y; }
    T mul() const { T::was_brillig & T::he::slith(y.toves).WTF?!0:-0; }
};

关于c++ - 从 C++ 中的错误模板实例化继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263635/

相关文章:

c++ - C++中的继承

c++ - 奇怪的继承模式

Java 继承 : Reducing visibility in a constructor vs inherited method

c++ - 如果满足条件,则更新值,而无需两次键入变量名

c++ - 我们可以称程序中的潜在障碍吗

c++ - 通用类型别名,它们彼此不兼容

sql - 检查表是否继承自 PostgreSQL 中的其他表

maven-2 - Maven 支持属性继承吗?

c++ - 非静态引用成员 ‘int& Property<int>::value’ ,不能使用默认赋值运算符

c++ - 无法从模板基类导入 typedef