经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
你知道C++如何在一个函数内返回不同类型吗?
来源:cnblogs  作者:架构师老卢  时间:2023/12/1 9:09:21  对本文有异议

C++ 中要在一个函数内返回不同类型的值,你可以使用 C++17 引入的 std::variant 或 std::any,或者使用模板和多态。下面将分别介绍这些方法。

方法一:使用 std::variant

std::variant 允许你在一个函数内返回不同类型的值,但它要求所有可能的返回类型都在一个有限的集合中,你需要提前定义这个集合。

首先,包括 <variant> 头文件:

  1. #include <variant>

然后,使用 std::variant 来定义函数的返回类型:

  1. std::variant<int, double, std::string> GetDifferentValue(int choice) {
  2. if (choice == 0) {
  3. return 42;
  4. } else if (choice == 1) {
  5. return 3.14;
  6. } else {
  7. return "Hello, World!";
  8. }
  9. }

在这个示例中,GetDifferentValue 函数可以返回 int、double 或 std::string,具体返回哪种类型取决于 choice 参数的值。

方法二:使用 std::any

std::any 允许你在一个函数内返回不同类型的值,而无需提前定义可能的返回类型。但在使用 std::any 时,你需要小心类型安全和类型转换。

首先,包括 <any> 头文件:

  1. #include <any>

然后,使用 std::any 来定义函数的返回类型:

  1. std::any GetDifferentValue(int choice) {
  2. if (choice == 0) {
  3. return 42;
  4. } else if (choice == 1) {
  5. return 3.14;
  6. } else {
  7. return "Hello, World!";
  8. }
  9. }

在这个示例中,GetDifferentValue 函数可以返回任何类型的值。

方法三:使用模板和多态

另一种方式是使用模板和多态,这样你可以在运行时动态确定返回的类型。这通常需要创建一个基类,派生出具体类型的子类,并使用基类指针或智能指针进行返回。

  1. #include <iostream>
  2. #include <memory>
  3. class Base {
  4. public:
  5. virtual void print() const = 0;
  6. };
  7. class IntType : public Base {
  8. public:
  9. IntType(int value) : value(value) {}
  10. void print() const override {
  11. std::cout << "Int: " << value << std::endl;
  12. }
  13. private:
  14. int value;
  15. };
  16. class DoubleType : public Base {
  17. public:
  18. DoubleType(double value) : value(value) {}
  19. void print() const override {
  20. std::cout << "Double: " << value << std::endl;
  21. }
  22. private:
  23. double value;
  24. };
  25. class StringType : public Base {
  26. public:
  27. StringType(const std::string& value) : value(value) {}
  28. void print() const override {
  29. std::cout << "String: " << value << std::endl;
  30. }
  31. private:
  32. std::string value;
  33. };
  34. std::unique_ptr<Base> GetDifferentValue(int choice) {
  35. if (choice == 0) {
  36. return std::make_unique<IntType>(42);
  37. } else if (choice == 1) {
  38. return std::make_unique<DoubleType>(3.14);
  39. } else {
  40. return std::make_unique<StringType>("Hello, World!");
  41. }
  42. }
  43. int main() {
  44. auto value = GetDifferentValue(2);
  45. value->print();
  46. return 0;
  47. }

在这个示例中,GetDifferentValue 返回一个指向 Base 基类的智能指针,而 Base 有多个派生类,代表不同的返回类型。

以上是三种在 C++ 中返回不同类型的方法,你可以根据具体需求选择其中之一。

原文链接:https://www.cnblogs.com/hanbing81868164/p/17868824.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号