修复派生 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(); }
};
最初基数 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(); }
};