Język C++
is_final
[szablon struktury] Szablon struktury służący do sprawdzania na etapie kompilacji, czy dana klasa jest finalSkładnia
#include <type_traits>
namespace std
{
template < typename T >
struct is_final;
}
Parametry szablonu
Pola struktury
Opis szczegółowy
Szablon struktury, posiadający pole
bool is_final::value
, które zależnie od typu szablonu przyjmuje wartości:
Dodatkowe informacje
W C++17 pojawił się szablon aliasu wygodniejszy w użyciu:
template < typename T >
constexpr inline bool is_final_v = is_final < T >::value;
Rzucane wyjątki
Sprawdzanie odbywa się na etapie kompilacji, dlatego nie są rzucane wyjątki.
Wymagania
Kompilator zgodny z C++14, lub posiadający implementację
std::is_final <>
.
Implementacja
Implementacja przed C++14 w sposób bazujący jedynie na aktualnym standardzie
nie jest możliwa.
Konieczne jest do tego wsparcie kompilatora, przykładowo w gcc mamy takowe wsparcie przed C++14 przy pomocy
__is_final()
:
#include <iostream>
using namespace std;
struct FinalClass final
{
};
struct NormalClass
{
};
int main()
{
cout << __is_final( NormalClass ) << endl;
cout << __is_final( FinalClass ) << endl;
}
Przykład
#include <iostream>
#include <type_traits>
using namespace std;
struct FinalClass final
{
};
struct NormalClass
{
};
int main()
{
cout << "Is NormalClass final?: " << std::is_final < NormalClass >::value << endl;
cout << "Is FinalClass final?: " << std::is_final < FinalClass >::value << endl;
}
Standardowe wyjście programu:
Is NormalClass final?: 0
Is FinalClass final?: 1
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.