Mam następujący matrycy struct
:Jak sprawdzać poprawność parametrów szablonu w czasie kompilacji, gdy klasa szablonowa nie zawiera użytecznych funkcji składowych?
template<int Degree>
struct CPowerOfTen {
enum { Value = 10 * CPowerOfTen<Degree - 1>::Value };
};
template<>
struct CPowerOfTen<0> {
enum { Value = 1 };
};
który ma być używany tak:
const int NumberOfDecimalDigits = 5;
const int MaxRepresentableValue = CPowerOfTen<NumberOfDecimalDigits>::Value - 1;
// now can use both constants safely - they're surely in sync
teraz, że szablon wymaga Degree
być nieujemna. Chciałbym wymusić na tym etapie kompilację.
Jak to zrobić? Próbowałem dodać destruktora do CPowerOfTen
:
~CPowerOfTen() {
compileTimeAssert(Degree >= 0);
}
ale ponieważ nie jest wywoływany bezpośrednio Visual C++ 9 nie zdecyduje się go instancji, a więc stwierdzenie assert kompilacji nie jest w ogóle oceniane.
Jak mogę wymusić sprawdzanie podczas kompilacji dla Degree
nieuzytywne?
Nie zatrzymanie rekurencji w czasie kompilacji jest jednak dużym problemem? – visitor