Bagaimana memeriksa apakah pasangan templat memiliki nilai

Dec 01 2020

Saya membuat kode struktur percobaan di C ++ dengan cuplikan template:

pair<char,T>

Saya memiliki metode void empty () di mana saya ingin memeriksa, apakah nilai kedua root tidak disetel (nilainya sama dengan nilai konstruktor default atau secara detail: nilai akan menyimpan jenis pasangan lainnya.). Saya tahu bahwa konstruktor default akan menerapkan 0 untuk tipe data int, tetapi bagaimana saya bisa memeriksa ini di dalam template?

Posting lain menyebutkan ini: return root == new Trie <char, T> () (gagal duo ke tidak diketahui == operator)

Terima kasih sebelumnya

Jawaban

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Seorang std::pairanggota s tidak dapat "tidak ditetapkan".

Anda dapat menggunakan std::optionaluntuk memodelkan nilai opsional.


"... nilai sama dengan konstruktor default ..."

Tentu saja Anda dapat memeriksa apakah nilai saat ini sama dengan nilai awal:

std::pair<int,int> x;
if (x.first == 0) {
    std::cout << "value of x.first is that of a default constructed std::pair<int,int>";
}

Atau untuk anggota kedua dari std::pair<int,T>:

if (x.second == T{} ) {
    std::cout << "second has same value as a default constructed T";
}

Contoh lengkapnya:

#include <iostream>
#include <utility>

template <typename T>
bool check_if_default_second(const std::pair<int,T>& p) {
    return p.second == T{};
}


int main() {
    std::pair<int,int> p;
    std::cout << check_if_default_second(p);
}