Misalkan saya punya kelas foo dengan parameter template T dan saya ingin memberikan deklarasi using untuk tipe referensi dan referensi-konstan yang sesuai dengan T:

template<typename T>
struct foo
{
    using reference = T&;
    using const_reference = T const&;
};

Apakah ada cara untuk "mengaktifkan" ini menggunakan deklarasi hanya jika T bukan void tanpa menspesifikasikan seluruh kelas foo?

3
0xbadf00d 12 Mei 2021, 10:33

1 menjawab

Jawaban Terbaik

Anda bisa mewarisi dari kelas dasar dengan spesialisasi untuk void:

template<typename T>
struct typedefs {
    using reference = T&;
    using const_reference = T const&;
};

template<>
struct typedefs<void> {};

template<typename T>
struct foo : typedefs<T>
{};
8
Bathsheba 12 Mei 2021, 08:28