Jika saya diizinkan melakukan hal berikut:
template <typename T = int>
class Foo{
};
Mengapa saya tidak diizinkan melakukan hal berikut di main?
Foo me;
Tetapi saya harus menentukan yang berikut:
Foo<int> me;
C ++ 11 memperkenalkan argumen templat default dan saat ini mereka sulit dipahami oleh pemahaman lengkap saya.
Foo
mungkin pengidentifikasi template atau mungkin instantiasi eksplisit tergantung pada apakah ada argumen default. Lebih baik menjaga sintaksis Instansiasi eksplisit. Anggap saja seperti fungsifoo
dengan satu parameter standar. Anda tidak dapat menyebutnya sepertifoo
, Anda menyebutnya denganfoo()
. Masuk akal untuk menjaga ini konsisten.foo
; Anda dapat memberi nama kelas tanpa argumenFoo
.<>
tidak diperlukan lagi dalam hal ini. Lihat jawaban saya untuk lebih jelasnya.Dengan C ++ 17, Anda memang bisa.
Fitur ini disebut pengurangan argumen templat kelas dan menambahkan lebih banyak fleksibilitas dengan cara Anda dapat mendeklarasikan variabel tipe templated .
Begitu,
sekarang kode C ++ legal .
sumber
Anda tidak diizinkan melakukan itu tetapi Anda bisa melakukan ini
dan kemudian lakukan
sumber
typedef Foo<float> Fooo;
tanpa tipe default?using Fooo = Foo<>;
Anda dapat menggunakan yang berikut ini:
Dan telah
int
menjadi argumen template Anda. Kurung sudut diperlukan dan tidak dapat dihilangkan.sumber