class Interface {public: virtual Interface method() = 0;};class Implementation : public Interface {public: virtual Implementation method() { /* ... */ }};
当然,这不会编译,因为你不能在C中返回一个抽象类.要解决这个问题,我使用以下解决方案:
template <class T>class Interface {public: virtual T method() = 0;};class Implementation : public Interface<Implementation> {public: virtual Implementation method() { /* ... */ }};
这个解决方案的工作原理非常好,而且对于我来说,它看起来不是非常优雅,因为文本的冗余位是接口的参数.如果你们能用这个设计指出我们的其他技术问题,我会很开心,但这是我唯一关心的问题.
有没有办法摆脱冗余模板参数?可能使用宏?
注意:所讨论的方法必须返回一个实例.我知道如果method()返回一个指针或引用,那就没有问题.
解决方法 Interface :: method()不能返回一个Interface实例而不使用指针或引用.返回非指针非参考接口实例需要实例化一个Interface本身的实例,因为Interface是抽象的,这是非法的.如果您希望基类返回一个对象实例,则必须使用以下之一:指针:
class Interface{public: virtual Interface* method() = 0;};class Implementation : public Interface{public: virtual Interface* method() { /* ... */ }};
参考:
class Interface{public: virtual Interface& method() = 0;};class Implementation : public Interface{public: virtual Interface& method() { /* ... */ }};
模板参数:
template<type T>class Interface{public: virtual T method() = 0;};class Implementation : public Interface<Implementation>{public: virtual Implementation method() { /* ... */ }};总结
以上是内存溢出为你收集整理的c – 返回基类中的抽象类型全部内容,希望文章能够帮你解决c – 返回基类中的抽象类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)