c++ - 如何在C++中实现可插拔接口(interface)

原文 标签 c++ templates inheritance interface

我正在尝试实现软件渲染器,该渲染器在顶点着色后发生

以下是其声明

template <class T>
class Interpolatable
{
    // The function calculates an interpolated value
    // along the fraction t between 0.0 and 1.0. 
    // When t = 1.0, endValue is returned.
    virtual T interpolate(const T &endValue, float t)=0;
};

struct Vertex: public Interpolatable<?????????>
{
    float x, y, z;

    Vertex()=default;
    Vertex(float, float, float);

    virtual Vertex &interpolate(const Vertex &endValue, float t) const;
};

是否可以使Vertex的插值方法返回Vertex的实例?
编译器不断给我错误

最佳答案

您可以安全地将类的名称作为模板参数传递,但是您遇到的任何错误均归因于函数签名不匹配。

struct Vertex: public Interpolatable<Vertex>

virtual T interpolate(const T &endValue, float t)=0;
virtual Vertex &interpolate(const Vertex &endValue, float t) const;
//             ^reference                                      ^declared const

您的签名似乎应该是:
virtual T interpolate(const T &endValue, float t) const =0;
virtual Vertex interpolate(const Vertex &endValue, float t) const;

关于c++ - 如何在C++中实现可插拔接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28960115/

相关文章:

c++ - “无法解析基于模板的标识符X”-从模板类(C++)调用模板参数类的方法

java - 解释以下Java程序的输出

c# - 继承XmlSerializer C#

c++ - 如何制作全屏滚动消息框或窗口?

c++ - 在堆栈和堆上对派生类对象使用基类指针

c++ - 继承的静态变量的行为

.net - 程序集中的模板函数不可见

c++ - 未为使用默认模板参数声明的别名模板指定模板参数时出错

java - 如何确定对象的类?

c++ - ( var > x) 和 ( x < var) 之间有什么区别吗?