Pertanyaan Bagaimana cara memberikan argumen template ke objek yang dibuat sejajar dengan kelasnya?


Saya tahu bahwa di C ++ kita dapat melakukan ini:

class A {} a;

Ini membuat objek tipe A bernama a. Ini setara dengan:

A a;

Saya bertanya-tanya bagaimana saya akan melakukan ini dengan template. Sebagai contoh:

template <typename T> struct N {} <int> n;

Ini tidak dapat dikompilasi, tetapi Anda mendapatkan ide. Bagaimana saya menentukan argumen template ke objek yang dibuat sejajar dengan definisi kelasnya? Apakah ini mungkin?


8
2017-12-24 16:47


asal


Jawaban:


Barang-barang setelah penutupan } disebut sebagai init-declarator-list sesuai dengan standar.

14,3 secara eksplisit melarangnya digunakan dalam deklarasi kelas template:

Dalam deklarasi template, spesialisasi eksplisit, atau eksplisit   Instansiasi daftar deklarator dalam deklarasi harus   mengandung paling banyak satu deklarator. Ketika deklarasi seperti itu digunakan untuk   mendeklarasikan template kelas, deklarator tidak diizinkan.


2
2017-12-24 17:42



Saya tidak berpikir Anda bisa melakukan itu. Bentuk yang Anda sebutkan, untuk struktur dan kelas disimpan, dari pemahaman saya, untuk kompatibilitas dengan c - di mana Anda bisa melakukan itu untuk struct.
Ide bagus, meskipun :)


1
2017-12-24 17:39



Anda tidak dapat mendeklarasikan variabel dari definisi template, bahkan jika semua argumen template memiliki default.

Ini juga merupakan kesalahan:

template <typename T = int> struct N {} n;

1
2017-12-24 17:42