弃用 Typedef

8

我有几个TypeDef需要弃用。我这么做是为了保留与已经存在的代码的向后兼容性。有没有一种优雅(或者不那么优雅)的解决方案?我希望它是平台无关的,但如果只有Visual Studio的解决方案也可以。


4
没有通用解决方案。@Nawaz提供了Microsoft的扩展功能。gcc的等效方式是typedef int myint __attribute__((deprecated)); - aschepler
3个回答

11

在MSVC++中,您可以这样弃用 typedef

typedef __declspec(deprecated) int myint;

MSVC++编译器会生成警告,指出myint已过时!

如果你希望编译器在编译已过时的typedef时生成特定的消息,则可以这样做:

typedef __declspec(deprecated("myint is deprecated, so most likely in the next version this myint will be missing")) int myint;

做什么?我觉得你漏掉了最后一部分:)) - lurscher
是的。那是一个笔误。谢谢! - Nawaz
MSVC也有#pragma deprecated,它也适用于宏。 - Cat Plus Plus

4
如果允许一次性的简单代码更改,您可以将typedef移动到“deprecated”命名空间中,在使用typedef的地方需要使用“using namespace deprecated”。
如果这不是一个选项,可能可以设计一个模板,当实例化时会生成警告,但我不知道如何立即生成这样的警告。
template <class T>
class TypedefHolder;

template <>
class TypedefHolder<int>
{
    typedef int WhateverType;
    // Something that induces a compile warning.
};

所以不要这样写:
typedef int WhateverType;

it becomes:

typedef TypedefHolder<int>::WhateverType WhateverType;

我认为如果我能够生成编译器警告,这将是一个非常好的解决方案。有人对自定义警告有什么想法吗? - Samaursa

4

我知道这个问题已经有10年了,但是对于仍在询问此问题的任何人来说,这个语法从C++14开始就得到了支持:since C++14

[[deprecated("reason")]] typedef int type;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接