【问题标题】:What is the correct syntax for deprecating a single constructor in Visual Studio C++?在 Visual Studio C++ 中弃用单个构造函数的正确语法是什么?
【发布时间】:2017-09-02 23:09:20
【问题描述】:

我在我的代码中使用了新的 [[deprecated("message")]] 属性。我有一个有两个构造函数的类,其中一个应该被标记为已弃用(显然是简化的,并且可能存在语法错误):

class MyClass
{
public:
    // good constructor
    MyClass(int someNumber): _someNumber(someNumber) {}

    [[deprecated("Use MyClass(int) instead")]]
    MyClass(const char* someStr): _someNumber(atoi(someStr)) {}

private:
    int _someNumber;
}

Visual Studio 抱怨“属性 'deprecated("Use MyClass(int) instead")' 不能在这种情况下应用。

有没有办法在 Visual Studio 2015 中弃用构造函数,以便在任何地方使用它时都会收到警告?

【问题讨论】:

  • 是托管的还是常规的 C++?
  • @orhtej2 正则 C++

标签: c++ visual-studio-2015 c++14 deprecated


【解决方案1】:

将参数标记为已弃用:

MyClass([[deprecated]]const char* someStr){}

或者:

MyClass([[deprecated("Use MyClass(int) instead")]]const char* someStr){}

或者使用__declspec(deprecated):

__declspec(deprecated("** Use MyClass(int) instead **"))
        MyClass(const char* someStr) : _someNumber(atoi(someStr)) {}

另外,根据您的更新版本(第 3 号),您可能会遇到this bug

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 2011-03-28
    • 2017-07-28
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2019-03-30
    • 2019-10-16
    相关资源
    最近更新 更多