2011-02-14 27 views
7

Kullanımdan kaldırmaya çalıştığım birkaç TypeDef var. Bunu zaten var olan kodla geriye dönük uyumluluk sağlamak için yapıyorum. Buna zarif (veya belki de çok da zarif olmayan) bir çözüm var mı? Platformdan bağımsız olmak isterdim, ancak bir Visual Studio tek çözümü varsa, bu da işe yarayacak. MSVC++ yılındaDeprecate Typedef

+4

Taşınabilir çözüm yoktur. @Nawaz Microsoft uzantısını verdi. Gcc karşılığı 'typedef int myint __attribute __ ((kullanımdan kaldırılmış));'. – aschepler

cevap

11

, böyle typedef kullanımdan kaldırmak olabilir:

typedef __declspec(deprecated) int myint; 

MSVC++ derleyici myint kullanımdan kaldırıldı konusunda uyararak üretecektir!

Ve kaldırılmış typedef derlerken derleyici belirli bir mesajı oluşturmak istiyorsanız, o zaman bu yapın: kerelik kolay kod değişiklikleri izin verilir

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

ne yapıyor? Son kısmı kaçırdığınızı düşünüyorum :)) – lurscher

+1

Muhtemelen son parantezi kapatmanız gerekiyor. OT: http://xkcd.com/859/ – KitsuneYMG

+0

@KitsuneYMG: Evet. Bu bir yazım hatasıydı. Teşekkürler! – Nawaz

4

Eğer sadece deprecated içine typedef hareket olabilir typedef kullanan noktalarda using namespace deprecated kullanımını gerektiren ad alanı.

o , örneği oluşturulan, bir uyarı üretecek bir şablon uydurmak mümkün olabilir bir seçenek değildir, ama hazırlıksız böyle bir uyarı oluşturmak için nasıl bilmiyorsanız:

template <class T> 
class TypedefHolder; 

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

böylece yerine:

typedef int WhateverType; 

o olur:

typedef TypedefHolder<int>::WhateverType WhateverType; 
+0

Derleyici uyarıları oluşturabilirsem, bu çok iyi bir çözüm olduğunu düşünüyorum. Özel uyarılar hakkında herhangi bir fikri olan var mı? – Samaursa