我可以防止嵌套的弃用方法调用引发警告吗?
Can I prevent nested deprecated method calls from raising warnings?
我有一些库代码,其中有一些我想从中移除的遗留代码。为此,我已开始将过时的方法标记为已弃用。在这些方法相互调用的地方,我收到了我不想看到的弃用警告(新功能意味着您只需要一次调用,因为暴露的 类 内部工作较少)。
有没有办法抑制从 OldMethod
到 OldMethodHelper
的调用的弃用警告? ..或者更好的方法来完成这项工作?
例如(在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;
}
Edit - 我发现 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 - 对代码示例进行了一些更正/澄清。
空口无凭,也许宏可以帮上忙。展示比解释更容易:
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
我有一些库代码,其中有一些我想从中移除的遗留代码。为此,我已开始将过时的方法标记为已弃用。在这些方法相互调用的地方,我收到了我不想看到的弃用警告(新功能意味着您只需要一次调用,因为暴露的 类 内部工作较少)。
有没有办法抑制从 OldMethod
到 OldMethodHelper
的调用的弃用警告? ..或者更好的方法来完成这项工作?
例如(在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;
}
Edit - 我发现 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 - 对代码示例进行了一些更正/澄清。
空口无凭,也许宏可以帮上忙。展示比解释更容易:
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