C++如何在一個(gè)函數(shù)內(nèi)返回不同類型(三種方法)
C++ 中要在一個(gè)函數(shù)內(nèi)返回不同類型的值,你可以使用 C++17 引入的 std::variant 或 std::any,或者使用模板和多態(tài)。下面將分別介紹這些方法。
方法一:使用 std::variant
std::variant 允許你在一個(gè)函數(shù)內(nèi)返回不同類型的值,但它要求所有可能的返回類型都在一個(gè)有限的集合中,你需要提前定義這個(gè)集合。
首先,包括 <variant> 頭文件:
#include <variant>
然后,使用 std::variant 來定義函數(shù)的返回類型:
std::variant<int, double, std::string> GetDifferentValue(int choice) { if (choice == 0) { return 42; } else if (choice == 1) { return 3.14; } else { return "Hello, World!"; } }
在這個(gè)示例中,GetDifferentValue 函數(shù)可以返回 int、double 或 std::string,具體返回哪種類型取決于 choice 參數(shù)的值。
方法二:使用 std::any
std::any 允許你在一個(gè)函數(shù)內(nèi)返回不同類型的值,而無需提前定義可能的返回類型。但在使用 std::any 時(shí),你需要小心類型安全和類型轉(zhuǎn)換。
首先,包括 <any> 頭文件:
#include <any>
然后,使用 std::any 來定義函數(shù)的返回類型:
std::any GetDifferentValue(int choice) { if (choice == 0) { return 42; } else if (choice == 1) { return 3.14; } else { return "Hello, World!"; } }
在這個(gè)示例中,GetDifferentValue 函數(shù)可以返回任何類型的值。
方法三:使用模板和多態(tài)
另一種方式是使用模板和多態(tài),這樣你可以在運(yùn)行時(shí)動(dòng)態(tài)確定返回的類型。這通常需要?jiǎng)?chuàng)建一個(gè)基類,派生出具體類型的子類,并使用基類指針或智能指針進(jìn)行返回。
#include <iostream> #include <memory> class Base { public: virtual void print() const = 0; }; class IntType : public Base { public: IntType(int value) : value(value) {} void print() const override { std::cout << "Int: " << value << std::endl; } private: int value; }; class DoubleType : public Base { public: DoubleType(double value) : value(value) {} void print() const override { std::cout << "Double: " << value << std::endl; } private: double value; }; class StringType : public Base { public: StringType(const std::string& value) : value(value) {} void print() const override { std::cout << "String: " << value << std::endl; } private: std::string value; }; std::unique_ptr<Base> GetDifferentValue(int choice) { if (choice == 0) { return std::make_unique<IntType>(42); } else if (choice == 1) { return std::make_unique<DoubleType>(3.14); } else { return std::make_unique<StringType>("Hello, World!"); } } int main() { auto value = GetDifferentValue(2); value->print(); return 0; }
在這個(gè)示例中,GetDifferentValue 返回一個(gè)指向 Base 基類的智能指針,而 Base 有多個(gè)派生類,代表不同的返回類型。
以上是三種在 C++ 中返回不同類型的方法,你可以根據(jù)具體需求選擇其中之一。
到此這篇關(guān)于你知道C++如何在一個(gè)函數(shù)內(nèi)返回不同類型嗎?的文章就介紹到這了,更多相關(guān)C++一個(gè)函數(shù)內(nèi)返回不同類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)動(dòng)態(tài)鏈表的示例代碼
本文主要介紹了C語言實(shí)現(xiàn)動(dòng)態(tài)鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05C++實(shí)現(xiàn)TCP客戶端及服務(wù)器Recv數(shù)據(jù)篩選處理詳解
這篇文章主要為大家介紹了C++實(shí)現(xiàn)TCP客戶端及服務(wù)器Recv數(shù)據(jù)篩選處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10C++利用MySQL API連接和操作數(shù)據(jù)庫實(shí)例詳解
這篇文章主要介紹了C++利用MySQL API連接和操作數(shù)據(jù)庫實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01C語言標(biāo)準(zhǔn)時(shí)間與秒單位相互轉(zhuǎn)換
這篇文章主要介紹了C語言標(biāo)準(zhǔn)時(shí)間與秒單位相互轉(zhuǎn)換,秒單位與標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換方式,這份代碼一般用在嵌入式單片機(jī)里比較多,比如:設(shè)置RTC時(shí)鐘的時(shí)間,從RTC里讀取秒單位時(shí)間后,需要轉(zhuǎn)換成標(biāo)準(zhǔn)時(shí)間顯示。下文分享需要的小伙伴可以參考一下2022-05-05C/C++中數(shù)據(jù)類型轉(zhuǎn)換詳解及其作用介紹
這篇文章主要介紹了C/C++中數(shù)據(jù)類型轉(zhuǎn)換詳解及其作用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09