我可以阻止嵌套的弃用方法调用引发警告吗?

时间:2015-07-27 08:35:23

标签: c++-cli deprecation-warning

我有一些库代码,其中包含一些我想要离开的遗留代码。为此,我开始将过时的方法标记为已弃用。在那些方法相互调用的地方,我得到了我不愿意看到的弃用警告(新功能意味着你只需要一次调用就可以减少类工作内部的暴露)。

有没有办法取消从OldMethodOldMethodHelper的来电的弃用警告? ..或者更好的方法来完成这个?

例如(在MyClass.h中):

public ref class MyClass
{
public:
    [Obsolete]
    void OldMethodHelper();

    [Obsolete]
    void OldMethod();

    void NewMethod();
};

MyClass.cpp

void MyClass::OldMethodHelper()
{
    // Some old helper method that's called both from within this class and externally.
}

void MyClass::OldMethod()
{
    OldMethodHelper(); // I don't want this call to raise a deprecation warning.
}

void MyClass::NewMethod()
{
    // A new method which replaces the calls to both of the previous methods.
}

代码的调用如下:

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");

    MyClass m;
    m.OldMethodHelper(); // This should raise a deprecation warning.
    m.OldMethod(); // This should raise a deprecation warning.
    m.NewMethod();

    return 0;
}

修改 - 我发现another post on SO建议使用#pragma warning(disable: 4996)是可能的,但似乎有点笨重的方法来解决这个问题:

    void MyClass::OldMethod()
    {
#pragma warning(push)
#pragma warning(disable: 4996) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
        OldMethodHelper(); // I don't want this call to raise a deprecation warning.
#pragma warning(pop)
    }

Edit2 - 对代码示例进行了一些更正/澄清。

1 个答案:

答案 0 :(得分:1)

在没有证据的情况下说话,但也许宏可能会有所帮助。更容易展示而不是解释:

MyClass.h
---------

#ifndef MYCLASS_DEPRECATE
#define MYCLASS_DEPRECATE [Obsolete]
#endif

class MyClass
{
    MYCLASS_DEPRECATE void OldMethodHelper();

    ...
}

MyClass.cpp
-----------

#define MYCLASS_DEPRECATE
#include "MyClass.h"

// The rest of the code