Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?

Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?

Barbara Streisand
Barbara Streisandasal
2024-11-28 21:59:12823semak imbas

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

Mengatasi Pemuatan Lebihan Fungsi mengikut Nilai Pulangan

Pengenalan

Pembebanan lebihan fungsi dalam C biasanya melibatkan pembezaan fungsi berdasarkan jenis parameternya . Walau bagaimanapun, ia juga mungkin untuk membebankan fungsi berdasarkan nilai pulangannya. Ini membolehkan anda menentukan fungsi yang mengembalikan jenis data yang berbeza bergantung pada cara ia digunakan.

Pernyataan Masalah

Pertimbangkan tugas berikut:

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"

Di sini, anda perlu mentakrifkan fungsi bernama mul yang mengembalikan sama ada integer atau rentetan, bergantung pada cara nilai pulangannya digunakan.

Pendekatan Penyelesaian

Penaipan Eksplisit:

Satu pendekatan ialah membezakan panggilan secara eksplisit dengan menaip. Sebagai contoh, anda boleh menentukan dua fungsi berasingan:

int mul(int, int);
std::string mul(char, int);

Dan panggilnya seperti berikut:

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"

Penunjuk Dummy:

Satu lagi kaedah melibatkan penambahan parameter dummy pada setiap fungsi, memaksa pengkompil untuk memilih yang betul. Contohnya:

int mul(int *, int, int);
std::string mul(std::string *, char, int);

Dan gunakannya dengan:

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"

Templat Nilai Pulangan (Pilihan 1):

Anda boleh mencipta fungsi "dummy" dengan kod yang tidak akan dikompilkan jika digunakan segera. Kemudian, tentukan versi templat khusus untuk jenis pulangan yang diingini:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);

Gunakannya seperti berikut:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"

Templat Nilai Pulangan (Pilihan 2):

Untuk kes dengan parameter yang berbeza, anda boleh menentukan pengkhususan templat yang berasingan dengan parameter yang berbeza jenis:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);

Dan panggil mereka sebagai:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"

Atas ialah kandungan terperinci Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn