我有两个类A
和B
,如下所示,B
必须继承自A
。没有提供类classType()
的{{1}}函数,如果调用B
,将获得B::classType()
的类类型。我想在这里得到编译器错误,而不是调用类A
的{{1}}函数。我该怎么办?
通常,classType()
的子类应提供函数A
,以防作者忘记编写A
函数,最好报告编译器错误。这就是目的。也许我可以在classType()
函数中使用classType()
。
static_assert
答案 0 :(得分:4)
或者,在fmt.setBackground(QColor(Qt::yellow))
中将A::classType()
设为私有:
B
编辑。问题明确之后,建议您使用类型特征技术代替静态成员函数。
class B : public A {
private:
using A::classType;
}
现在用户必须为template<class>
struct Traits;
template<>
struct Traits<A> {
static const char* classType() {
return "A";
}
};
template<class T>
const char* TypeOf() {
return Traits<T>::classType();
}
定义自己的类型特征,否则
B
无法编译。
答案 1 :(得分:3)
除了代码中的几个拼写错误外,还为类$.getJSON(setUrl(pagination, page), function (response) {
var old = [];
old = JSON.parse(localStorage.getItem('msg'));
old.push(response.DATA);
console.log(old);
});
的定义添加了以下内容
B
答案 2 :(得分:1)
我从@Evg得到了这个主意,谢谢Evg。 使用如下模板:
class A
{
public:
template <class T>
static const char* classType() { static_assert(false, "classType not implemented"); }
template <>
static const char* classType<A>()
{
static const char* s_classType = "A";
return s_classType;
}
};
template <class T>
const char* TypeOf()
{
return T::classType<T>();
}
答案 3 :(得分:0)
将函数声明为纯虚函数。
class A
{
public:
virtual static const char* classType() =0;
};
然后,所有从A继承的实例化类都必须实现这一点。