我认为解决这一问题的最简单方法是,不是实际上将该类标记为已弃用,而是为该类创建一个已被标记为已废弃的私有类,并将其实例化为其构造函数中的临时变量。因此,如果实例化派生类,仍然会收到弃用警告。
class base {
class DEPRECATED deprecator {};
public:
base() {
deprecator issue_warning;
(void) issue_warning; // this line is no-op to silence unused variable warning for local variable
}
};
class derived : public base {
public:
derived()
: base()
{
// I am also deprecated, because I called the ctor for base
// which instantiates a deprecated class
}
};
如果
base
有许多不同的构造函数,但这至少给出了一个想法。一般来说
derived
被构造
基础
必须构造--必须在
衍生的,衍生的
实例可以开始。