Устаревший Typedef - PullRequest
       3

Устаревший Typedef

7 голосов
/ 14 февраля 2011

У меня есть несколько TypeDef, которые я хочу объявить устаревшими.Я делаю это, чтобы сохранить обратную совместимость с кодом, который уже существует.Есть ли элегантное (или, возможно, не очень элегантное) решение для этого?Я бы хотел, чтобы он был независимым от платформы, но если есть решение только для Visual Studio, это будет хорошо.

Ответы [ 2 ]

11 голосов
/ 14 февраля 2011

В 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;
4 голосов
/ 14 февраля 2011

Если разрешены одноразовые простые изменения кода, вы можете просто переместить typedef в пространство имен deprecated, требующее использования using namespace deprecated в точках, которые используют typedef.

Если это не вариант, можно создать шаблон, который при создании экземпляра выдаст предупреждение, но я не знаю, как сгенерировать такое предупреждение не сразу:

template <class T>
class TypedefHolder;

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

так вместо:

typedef int WhateverType;

становится:

typedef TypedefHolder<int>::WhateverType WhateverType;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...