Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: baziorek
Język C++

is_final

[szablon struktury] Szablon struktury służący do sprawdzania na etapie kompilacji, czy dana klasa jest final

Składnia

C/C++
#include <type_traits>
namespace std
{
    template < typename T >
    struct is_final;
}

Parametry szablonu

ParametrOpis
Ttyp, dla którego sprawdzamy, czy jest final

Pola struktury

PoleOpis
constexpr static valuewartość będącą true dla klas z przydomkiem final, w przeciwnym razie false

Opis szczegółowy

Szablon struktury, posiadający pole
bool is_final::value
, które zależnie od typu szablonu przyjmuje wartości:
  • true
     dla klas z przydomkiem final
  • false
     w pozostałych przypadkach
  • niezdefiniowane dla klas niekompletnych

Dodatkowe informacje

W C++17 pojawił się szablon aliasu wygodniejszy w użyciu:
C/C++
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()
:
C/C++
#include <iostream>
using namespace std;

struct FinalClass final
{
};
struct NormalClass
{
};

int main()
{
    cout << __is_final( NormalClass ) << endl;
    cout << __is_final( FinalClass ) << endl;
}

Przykład

C/C++
#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