Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Fungsi generik adalah fungsi yang dideklarasikan dengan parameter jenis. Saat dipanggil, jenis aktual digunakan alih-alih parameter jenis.
Semua platform
Keterangan
Fitur ini tidak berlaku untuk semua platform.
Windows Runtime
Keterangan
Fitur ini tidak didukung di Windows Runtime.
Persyaratan
Tidak berlaku.
Runtime Bahasa Umum
Fungsi generik adalah fungsi yang dideklarasikan dengan parameter jenis generik. Saat dipanggil, jenis aktual digunakan alih-alih parameter jenis.
Sintaks
generic-declaration:
generic< generic-parameter-list > constraint-clause-listMemilih function-definition
generic-parameter-list:
generic-parameter
generic-parameter-list , generic-parameter
generic-parameter:
attributesMemilih class identifier
attributesMemilih typename identifier
constraint-clause-list:
constraint-clause-listMemilih constraint-clause
constraint-clause:
where identifier : constraint-item-list
constraint-item-list:
constraint-item
constraint-item-list , constraint-item
constraint-item:
type-id
ref class
ref struct
value class
value struct
gcnew ( )
generic-id:
generic-name < generic-argument-list >
generic-name:
identifier
operator-function-id
generic-argument-list:
generic-argument
generic-argument-list , generic-argument
generic-argument:
type-id
Parameter
generic-parameter-list
Daftar pengidentifikasi parameter jenis generik yang dipisahkan koma secara opsional.
attributes
(Opsional) Informasi deklaratif ekstra. Untuk informasi selengkapnya tentang atribut dan kelas atribut, lihat atribut.
constraint-clause-list
Daftar opsional ini menentukan batasan pada jenis yang dapat digunakan sebagai argumen jenis. Dibutuhkan formulir yang ditentukan dalam Batasan pada parameter jenis generik (C++/CLI).
function-definition
Definisi metode atau fungsi mandiri. Fungsi ini mungkin tidak memiliki virtual pengubah, yang tidak diizinkan karena metode virtual mungkin tidak umum. Isi fungsi dapat merujuk ke pengidentifikasi parameter jenis generik. Fungsi ini mungkin merupakan operator fungsi.
generic-id
Saat Anda memanggil instans fungsi generik, Anda menentukan jenis yang digunakan untuk mengimplementasikannya di generic-argument-list. Daftar ini sesuai dengan generic-parameter-list, dan harus memenuhi batasan opsional constraint-clause-list.
generic-name
Fungsi generik mungkin memiliki identifier sebagai namanya, atau mungkin merupakan operator fungsi.
Keterangan
Fungsi generik adalah fungsi yang dideklarasikan dengan satu atau beberapa parameter jenis generik. Mereka mungkin metode dalam class fungsi atau struct, atau mandiri. Deklarasi generik tunggal secara implisit menyatakan keluarga fungsi yang hanya berbeda dalam penggantian jenis aktual yang berbeda untuk parameter jenis generik.
Konstruktor class atau struct mungkin tidak dideklarasikan dengan parameter jenis generik.
Ketika dipanggil, parameter jenis generik digantikan oleh jenis aktual. Jenis aktual dapat ditentukan secara eksplisit dalam tanda kurung sudut menggunakan sintaks yang mirip dengan panggilan templat fungsi. Jika dipanggil tanpa parameter jenis, pengkompilasi akan mencoba menyimpulkan jenis aktual dari parameter yang disediakan dalam panggilan fungsi. Pengkompilasi melaporkan kesalahan jika argumen jenis yang dimaksudkan tidak dapat disimpulkan dari parameter yang digunakan.
Persyaratan
Opsi pengkompilasi: /clr
Contoh
Sampel kode berikut menunjukkan fungsi generik.
// generics_generic_function_1.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}
ref struct A {
generic <typename ItemType>
void G(ItemType) {}
generic <typename ItemType>
static void H(int i) {}
};
int main() {
A myObject;
// generic function call
myObject.G<int>(10);
// generic function call with type parameters deduced
myObject.G(10);
// static generic function call
A::H<int>(10);
// global generic function call
G<int>(10);
}
Fungsi generik dapat kelebihan beban berdasarkan tanda tangan atau aritas, jumlah parameter jenis pada fungsi. Selain itu, fungsi generik dapat kelebihan beban dengan fungsi non-generik dengan nama yang sama, selama fungsi berbeda dalam beberapa parameter jenis. Misalnya, fungsi berikut dapat kelebihan beban:
// generics_generic_function_2.cpp
// compile with: /clr /c
ref struct MyClass {
void MyMythod(int i) {}
generic <class T>
void MyMythod(int i) {}
generic <class T, class V>
void MyMythod(int i) {}
};
Contoh berikut menggunakan fungsi generik untuk menemukan elemen pertama dalam array. Ini menyatakan MyClass, yang mewarisi dari kelas MyBaseClassdasar . MyClass berisi fungsi generik, MyFunction, yang memanggil fungsi generik lain, MyBaseClassFunction, dalam kelas dasar. Dalam main, fungsi generik, MyFunction, disebut menggunakan argumen jenis yang berbeda.
// generics_generic_function_3.cpp
// compile with: /clr
using namespace System;
ref class MyBaseClass {
protected:
generic <class ItemType>
ItemType MyBaseClassFunction(ItemType item) {
return item;
}
};
ref class MyClass: public MyBaseClass {
public:
generic <class ItemType>
ItemType MyFunction(ItemType item) {
return MyBaseClass::MyBaseClassFunction<ItemType>(item);
}
};
int main() {
MyClass^ myObj = gcnew MyClass();
// Call MyFunction using an int.
Console::WriteLine("My function returned an int: {0}",
myObj->MyFunction<int>(2003));
// Call MyFunction using a string.
Console::WriteLine("My function returned a string: {0}",
myObj->MyFunction<String^>("Hello generic functions!"));
}
My function returned an int: 2003
My function returned a string: Hello generic functions!