Je commence un nouveau projet qui ciblera MSVC
, GCC (latest)
, GCC 4.3 ARM
et plus. Le système de construction waf
que nous avons construit a la fonction de détection de C++11
du compilateur.C++ 11 Polyfills
J'ai maintenant des macros de préprocesseur pour toutes les fonctionnalités du compilateur que je cible pour C++11
, par exemple #ifdef WAF_FEATURE_CXX_STRONGLY_TYPED_ENUMS
. Je peux donc compiler un code différent pour ce que le compilateur supporte. Comme GCC
soutient presque tout être MSVC
est même pas proche (même avec MSVC
11)
Cela me fait penser à développement web polyfills - si la fonction n'est pas disponible avec la mise en œuvre de la fonction mis disponible.
Ce n'est pas aussi simple que les polyfills de développement Web que pour C++11
mais est-ce qu'il y a quelque chose que je peux simplement implémenter avec C++ 03 si le compilateur ne le supporte pas?
Cela se résume au fait que je veux utiliser les agents recenseurs fortement typés dans mon API publique, mais la portée MyClass::MyEnumerator::EnumValue
ressemblera plus à MyClass::EnumValue
C++03
. Y at-il de toute façon je peux obtenir le même de se produire dans C++03
facilement:
class MyClass {
public:
#ifdef WAF_FEATURE_CXX_STRONGLY_TYPED_ENUMS
enum class MyEnumerator : unsigned int {
#else
enum MyEnumerator {
#endif
EnumValue = 0
}
void method(MyEnumerator e);
}
MyClass mc = new MyClass();
mc.method(MyClass::MyEnumerator::EnumValue) // C++11
mc.method(MyClass::EnumValue) // C++03 :(
Voilà ce que j'ai fini avec - la déclaration paramètre de méthode doit avoir le mannequin ENUM –