修复派生类中的警告“未使用的转换函数”

问题描述

最初基类 B 是从类 A 派生的。但是由于 C 派生自 A 和 B,我陷入了令人讨厌的菱形继承,因此删除了 B 中的继承,选择了到 A 的转换函数

现在我收到了关于 typ C 类的警告,因为从未使用过转换为基类。我该如何修复或删除它们?程序运行没有问题。

// base class providing most functionality
class A{
public:
int doStuff(){ return 0; };
};

// pure virtual interface providing a conversion to A
class B{
public:
virtual operator A&()=0;
};

// interface implementation
class C: public A,public B{
public:
virtual operator A&() override{return *this;}
};

警告:将永远不会使用将“C”转换为其基类“A”的转换函数

        virtual operator A&() override{return *this;}
                ^

解决方法

给定一个 C 实例,您的编译器完全有能力将其转换为对 A 的引用,而无需此转换函数。将使用隐式转换,并且永远不会使用此运算符重载,这就是编译器诊断所说的字面意思。

如果您的目标是让 B 的方法获得对相关 A 对象的引用,那么简单的解决方案是使用常规函数,而不是为此使用重载运算符:

class B{
public:
virtual A& get_a()=0;
};

// interface implementation
class C: public A,public B{
public:
virtual A& get_a() override{return *this;}
};

B 中的其他方法只需要明确地使用 get_a()。但是,如果您愿意:

class B{
public:
virtual A& get_a()=0;
operator A&() { return get_a(); }
};