我在接口中有一个方法,我想用便携式C++弃用.当我用Google搜索时,我得到的只是Microsoft特定的解决方案; #pragma deprecated和__declspec(不建议使用).
二等奖解决方案是ifdef MSVC和GCC解决方案.
谢谢
前言:
这是一个关于在应用于覆盖继承父虚拟方法的子类时,与C++ 11一起引入的删除操作符的新含义的最佳实践的问题.
背景:
根据标准,引用的第一个用例是明确禁止某些类型的调用函数,否则转换将是隐含的,例如最新C++ 11标准草案的 §8.4.3中的示例:
struct sometype {
sometype() = delete; // OK, but redundant
some_type(std::intmax_t) = delete;
some_type(double);
};
Run Code Online (Sandbox Code Playgroud)
上面的例子清晰而有目的.但是,以下示例中,通过将新运算符定义为已删除来覆盖新运算符并阻止其被调用,这让我想到了我稍后在问题部分中确定的其他方案(下面的示例来自C++的第 8.4.3节)11标准草案):
struct sometype {
void *operator new(std::size_t) = delete;
void *operator new[](std::size_t) = delete;
};
sometype *p = new sometype; // error, deleted class operator new
sometype *q = new sometype[3]; // error, deleted class operator new[]
Run Code Online (Sandbox Code Playgroud)
题:
通过将这种思想扩展到继承,我很好奇其他人关于以下用法示例是否是明确有效的用例或者是否是对新添加的功能的滥用不清楚的想法.请为您的答案提供理由(将提供最具说服力的推理的示例).在下面的示例中,设计尝试通过使第二个版本的库继承自第一个版本来维护两个版本的库(需要实例化库).这个想法是允许错误修复或对第一个库版本所做的更改自动传播到第二个库版本,同时允许第二个库版本只关注它与第一个版本的差异.要弃用第二个库版本中的函数,delete运算符用于禁止对重写函数的调用:
class LibraryVersion1 {
public:
virtual void doSomething1() { /* does something */ }
// …Run Code Online (Sandbox Code Playgroud)