在GCC中,当有人使用
调用已弃用的函数时,您可以创建弃用警告class CreateSaleViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableViewMenu: UITableView!
let options : Int = 12
override func viewDidLoad() {
tableViewMenu.dataSource = self
tableViewMenu.delegate = self
tableViewMenu.register(UINib(nibName: "CellCreateSaleVC", bundle: nil), forCellReuseIdentifier: "CellCreateSale")
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return options
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellCreateSale") as! CellCreateSaleVC
return cell
}
}
当有人覆盖类的虚方法时,您是否可以创建类似的弃用警告?
答案 0 :(得分:1)
使用[[deprecated]]
和[[deprecated(message)]]
标准属性(自C ++ 14以来可用)在Visual Studio中产生预期效果,既可以使用已弃用的方法,也可以通过发出C4996警告来覆盖(可能是忽略)。我不能代表其他编译器,我希望因为这是标准的,他们也应该遵守。
class Base
{
public:
[[deprecated("dont use, deprecated")]] virtual void foo()
{
}
};
class Derived : public Base
{
public:
void foo() override
{
}
};
int main()
{
Base b;
b.foo();
}
这将产生2个警告,一个用于覆盖,一个用于尝试使用,
答案 1 :(得分:0)
它会生成错误而不是警告,但您可以将final
说明符添加到基类中的方法声明中。然后没有人可以覆盖它。
您还可以在运行时(而不是编译时)生成弃用消息,方法是调用该函数并查看它是否运行基类实现(通过在基类实现中设置一个标志,然后在呼叫)。