Tür Özellikleri için Derleyici Desteği (C++/CLI ve C++/CX)
Microsoft C++ derleyicisi, derleme zamanında bir türün çeşitli özelliklerini gösteren C++/CLI ve C++/CX uzantıları için tür özelliklerini destekler.
Tüm Çalışma Zamanları
Açıklamalar
Tür özellikleri özellikle kitaplık yazan programcılar için yararlıdır.
Aşağıdaki liste, derleyici tarafından desteklenen tür özelliklerini içerir. Tür özelliği adıyla belirtilen koşul karşılanmazsa tüm tür özellikleri döndürülebilir false
.
(Aşağıdaki listede kod örnekleri yalnızca C++/CLI dilinde yazılmıştır. Ancak ilgili tür özelliği, aksi belirtilmedikçe C++/CX'te de desteklenir. "Platform türü" terimi, Windows Çalışma Zamanı türlerini veya ortak dil çalışma zamanı türlerini ifade eder.)
__has_assign(
type)
Platform veya yerel türün kopyalama atama işleci varsa döndürür
true
.ref struct R { void operator=(R% r) {} }; int main() { System::Console::WriteLine(__has_assign(R)); }
__has_copy(
type)
Platformun veya yerel türün bir kopya oluşturucusunun olup olmadığını döndürür
true
.ref struct R { R(R% r) {} }; int main() { System::Console::WriteLine(__has_copy(R)); }
__has_finalizer(
type)
(C++/CX'te desteklenmez.) CLR türünün sonlandırıcısı varsa döndürür
true
. Daha fazla bilgi için bkz . Yıkıcılar ve sonlandırıcılar: Nasıl yapılır: Sınıfları ve yapıları (C++/CLI) tanımlama ve kullanma.using namespace System; ref struct R { ~R() {} protected: !R() {} }; int main() { Console::WriteLine(__has_finalizer(R)); }
__has_nothrow_assign(
type)
Kopyalama atama işlecinin özel durum belirtimi boşsa döndürür
true
.#include <stdio.h> struct S { void operator=(S& r) throw() {} }; int main() { __has_nothrow_assign(S) == true ? printf("true\n") : printf("false\n"); }
__has_nothrow_constructor(
type)
Varsayılan oluşturucunun boş bir özel durum belirtimi varsa döndürür
true
.#include <stdio.h> struct S { S() throw() {} }; int main() { __has_nothrow_constructor(S) == true ? printf("true\n") : printf("false\n"); }
__has_nothrow_copy(
type)
Kopyalama oluşturucusunun boş bir özel durum belirtimi varsa döndürür
true
.#include <stdio.h> struct S { S(S& r) throw() {} }; int main() { __has_nothrow_copy(S) == true ? printf("true\n") : printf("false\n"); }
__has_trivial_assign(
type)
Türün önemsiz, derleyici tarafından oluşturulan bir atama işleci varsa döndürür
true
.#include <stdio.h> struct S {}; int main() { __has_trivial_assign(S) == true ? printf("true\n") : printf("false\n"); }
__has_trivial_constructor(
type)
Türünde önemsiz, derleyici tarafından oluşturulan bir oluşturucu varsa döndürür
true
.#include <stdio.h> struct S {}; int main() { __has_trivial_constructor(S) == true ? printf("true\n") : printf("false\n"); }
__has_trivial_copy(
type)
Türün önemsiz, derleyici tarafından oluşturulan bir kopya oluşturucusunun olması durumunda döndürür
true
.#include <stdio.h> struct S {}; int main() { __has_trivial_copy(S) == true ? printf("true\n") : printf("false\n"); }
__has_trivial_destructor(
type)
Türün önemsiz, derleyici tarafından oluşturulan bir yıkıcısı varsa döndürür
true
.// has_trivial_destructor.cpp #include <stdio.h> struct S {}; int main() { __has_trivial_destructor(S) == true ? printf("true\n") : printf("false\n"); }
__has_user_destructor(
type)
Platform veya yerel türün kullanıcı tarafından bildirilen bir yıkıcısı varsa döndürür
true
.// has_user_destructor.cpp using namespace System; ref class R { ~R() {} }; int main() { Console::WriteLine(__has_user_destructor(R)); }
__has_virtual_destructor(
type)
Türün bir sanal yıkıcısı varsa döndürür
true
.__has_virtual_destructor
ayrıca platform türleri üzerinde de çalışır ve platform türündeki kullanıcı tanımlı yıkıcılar sanal bir yıkıcıdır.// has_virtual_destructor.cpp #include <stdio.h> struct S { virtual ~S() {} }; int main() { __has_virtual_destructor(S) == true ? printf("true\n") : printf("false\n"); }
__is_abstract(
type)
Tür soyut bir türse döndürür
true
. Yerel soyut türler hakkında daha fazla bilgi için bkz . Soyut Sınıflar.__is_abstract
ayrıca platform türleri için de çalışır. En az bir üyeye sahip arabirim, en az bir soyut üyeye sahip bir başvuru türü olduğu gibi soyut bir türdür. Soyut platform türleri hakkında daha fazla bilgi için bkz . soyut.// is_abstract.cpp #include <stdio.h> struct S { virtual void Test() = 0; }; int main() { __is_abstract(S) == true ? printf("true\n") : printf("false\n"); }
__is_base_of(
base
,
derived
)
İlk tür ikinci türün temel sınıfıysa veya her iki tür de aynıysa döndürür
true
.__is_base_of
ayrıca platform türleri üzerinde de çalışır. Örneğin, ilk tür bir arabirim sınıfıysa ve ikinci tür arabirimi uygularsa döndürürtrue
.// is_base_of.cpp #include <stdio.h> struct S {}; struct T : public S {}; int main() { __is_base_of(S, T) == true ? printf("true\n") : printf("false\n"); __is_base_of(S, S) == true ? printf("true\n") : printf("false\n"); }
__is_class(
type)
Türün yerel bir sınıf veya yapı olup olmadığını döndürür
true
.#include <stdio.h> struct S {}; int main() { __is_class(S) == true ? printf("true\n") : printf("false\n"); }
__is_convertible_to(
from
,
to
)
İlk türün ikinci türe dönüştürülebildiğini döndürür
true
.#include <stdio.h> struct S {}; struct T : public S {}; int main() { S * s = new S; T * t = new T; s = t; __is_convertible_to(T, S) == true ? printf("true\n") : printf("false\n"); }
__is_delegate(
type)
Temsilci ise
type
döndürürtrue
. Daha fazla bilgi için bkz . temsilci (C++/CLI ve C++/CX).delegate void MyDel(); int main() { System::Console::WriteLine(__is_delegate(MyDel)); }
__is_empty(
type)
Türün örnek veri üyesi yoksa döndürür
true
.#include <stdio.h> struct S { int Test() {} static int i; }; int main() { __is_empty(S) == true ? printf("true\n") : printf("false\n"); }
__is_enum(
type)
Türün yerel bir sabit listesi olup olmadığını döndürür
true
.// is_enum.cpp #include <stdio.h> enum E { a, b }; struct S { enum E2 { c, d }; }; int main() { __is_enum(E) == true ? printf("true\n") : printf("false\n"); __is_enum(S::E2) == true ? printf("true\n") : printf("false\n"); }
__is_interface_class(
type)
Bir platform arabirimi geçirildiyse döndürür
true
. Daha fazla bilgi için bkz . arabirim sınıfı.// is_interface_class.cpp using namespace System; interface class I {}; int main() { Console::WriteLine(__is_interface_class(I)); }
__is_pod(
type)
Tür oluşturucu veya özel ya da korumalı statik olmayan üye, temel sınıf ve sanal işlev içermeyen bir sınıf veya birleşimse döndürür
true
. POD'lar hakkında daha fazla bilgi için C++ standardının 8.5.1/1, 9/4 ve 3.9/10 bölümlerine bakın.__is_pod
temel türlerde false döndürür.#include <stdio.h> struct S {}; int main() { __is_pod(S) == true ? printf("true\n") : printf("false\n"); }
__is_polymorphic(
type)
Yerel bir türün sanal işlevleri varsa döndürür
true
.#include <stdio.h> struct S { virtual void Test(){} }; int main() { __is_polymorphic(S) == true ? printf("true\n") : printf("false\n"); }
__is_ref_array(
type)
Bir platform dizisi geçirilirse döndürür
true
. Daha fazla bilgi için bkz . Diziler.using namespace System; int main() { array<int>^ x = gcnew array<int>(10); Console::WriteLine(__is_ref_array(array<int>)); }
__is_ref_class(
type)
Bir başvuru sınıfı geçirildiyse döndürür
true
. Kullanıcı tanımlı başvuru türleri hakkında daha fazla bilgi için bkz . Sınıflar ve Yapılar.using namespace System; ref class R {}; int main() { Console::WriteLine(__is_ref_class(Buffer)); Console::WriteLine(__is_ref_class(R)); }
__is_sealed(
type)
Korumalı olarak işaretlenmiş bir platform veya yerel tür geçirildiyse döndürür
true
. Daha fazla bilgi için bkz . korumalı.ref class R sealed{}; int main() { System::Console::WriteLine(__is_sealed(R)); }
__is_simple_value_class(
type)
Atık olarak toplanan yığına başvuru içermeyen bir değer türü geçirilirse döndürür
true
. Kullanıcı tanımlı değer türleri hakkında daha fazla bilgi için bkz . Sınıflar ve Yapılar.using namespace System; ref class R {}; value struct V {}; value struct V2 { R ^ r; // not a simple value type }; int main() { Console::WriteLine(__is_simple_value_class(V)); Console::WriteLine(__is_simple_value_class(V2)); }
__is_union(
type)
Bir tür birleşim ise döndürür
true
.#include <stdio.h> union A { int i; float f; }; int main() { __is_union(A) == true ? printf("true\n") : printf("false\n"); }
__is_value_class(
type)
Bir değer türü geçirilirse döndürür
true
. Kullanıcı tanımlı değer türleri hakkında daha fazla bilgi için bkz . Sınıflar ve Yapılar.value struct V {}; int main() { System::Console::WriteLine(__is_value_class(V)); }
Windows Çalışma Zamanı
Açıklamalar
Bu __has_finalizer(
platform sonlandırıcıları desteklemediğinden tür)
türü özelliği desteklenmez.
Gereksinimler
Derleyici seçeneği: /ZW
Ortak Dil Çalışma Zamanı
Açıklamalar
(Bu özellik için platforma özgü bir açıklama yoktur.)
Gereksinimler
Derleyici seçeneği: /clr
Örnekler
Örnek
Aşağıdaki kod örneğinde, derleme için derleyici türü özelliğini kullanıma sunma amacıyla /clr
bir sınıf şablonunun nasıl kullanılacağı gösterilmektedir. Daha fazla bilgi için bkz. Windows Çalışma Zamanı ve Yönetilen Şablonlar.
// compiler_type_traits.cpp
// compile with: /clr
using namespace System;
template <class T>
ref struct is_class {
literal bool value = __is_ref_class(T);
};
ref class R {};
int main () {
if (is_class<R>::value)
Console::WriteLine("R is a ref class");
else
Console::WriteLine("R is not a ref class");
}
R is a ref class
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin