修复派生 class 中的警告 "unused conversion function"

Fix warning "unused conversion function" in derived class

最初基数 class B 派生自 class A。但由于 C 派生自 A 和 B,我陷入了一个讨厌的菱形继承,因此删除了 B 中的继承,选择了 a到 A.

的转换函数

现在我收到关于 class 类型 C 的警告,因为从未使用过转换为基本 class 类型。我怎样才能修复或删除那些?程序运行没有问题。

// 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' 转换为其基数 class '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(); }
};