Saya mencoba memahami bagian kode ini, dan saya menemukan sesuatu yang tidak dapat saya tafsirkan:

template<unsigned ELEMENT_DIM, class SIM, unsigned SPACE_DIM>
void CellBasedSimulationArchiver<ELEMENT_DIM, SIM, SPACE_DIM>::Save(SIM* pSim)
{
    // Do a bunch of stuff

    boost::archive::text_oarchive* p_arch = arch_opener.GetCommonArchive();

    // Archive the simulation (const-ness would be a pain here)
    (*p_arch) & pSim;  //<--------------- What is this?
}

Maksud dari fungsi ini adalah untuk mengarsipkan keadaan simulasi menggunakan boost, sehingga dapat dimuat ulang di lain waktu dan dilanjutkan. Saya mencoba memahami bagaimana pengarsipan sebenarnya terjadi, tetapi garis dengan panah membingungkan saya. Pada titik tertentu penghematan yang sebenarnya harus terjadi, dan saya kira panah adalah tempat itu terjadi.

Pasti ada sesuatu yang terjadi dengan dorongan, tetapi apa sebenarnya arti baris ini dan apa yang & lakukan di sini? Apakah itu semacam referensi? Saya melihat beberapa dokumentasi dan berisi operator <<, tetapi tidak ada di sana sebuah &

1
Phill 8 Agustus 2019, 07:13

1 menjawab

Jawaban Terbaik

Ampersand di sini adalah operator & biner. Untuk tipe integer, ini akan menjadi operator AND bitwise (seperti << akan menjadi operator shift kiri), tetapi boost::archive::text_oarchive bukan tipe integer. Pasti ada fungsi overload operator yang ditentukan untuk kelas ini. Dengan demikian, operator ini akan memanggil fungsi itu.

Menurut dokumen:

sa << x
sa & x

Ekspresi ini harus melakukan fungsi yang persis sama. Mereka menambahkan nilai x bersama dengan informasi lain ke sa. Informasi lain ini ditentukan oleh implementasi arsip. Biasanya informasi ini adalah yang diperlukan oleh jenis Arsip Pemuatan yang sesuai untuk mengembalikan nilai x dengan benar.

Jadi, (*p_arch) & pSim; menambahkan pSim ke dalam arsip yang ditunjuk oleh p_arch.

2
Community 20 Juni 2020, 09:12