C++ 一个函数,可以根据接受的值返回两种类型之一
C++ A function that can return one of two types depending on the accepted value
fun(int a) {
if (a) return a; return "empty";
}
我需要一个获取数字的函数,并根据它的数字返回 int 变量或字符串。 请告诉我如何实现这样的功能。
对于 C++ 17,您可以使用变体:
std::variant<int, std::string> fun(int a) {
if (a) return a; return "empty";
}
或者使用具有可选功能的结构:
struct r {
std::optional<int> i;
std::optional<std::string> s;
};
r fun(int a) {
r out;
if (a) out.i = a; else out.s = "empty";
return out;
}
或者对于先前的标准,请使用带有指示有效性的字段的结构。
struct r {
enum class type {i, s};
int i;
std::string s;
type t;
};
r fun(int a) {
r out;
if (a) {
out.i = a;
out.t = r::type::i;
else {
out.s = "empty";
out.t = r::type::s;
}
return out;
}
像python这样的可解释语言对参数类型和返回值的类型没有限制。但是,C++只能接受和返回预定义类型的值。 现在,除了其他答案之外,如果您没有 C++17,您可以尝试以下方式:
std::pair<int, string> func(int a)
{
if(a) return std::make_pair(a , "");
return std::make_pair(0,"string");
}
在被调用方中,您可以针对 std::p air 的两个成员检查非空。
您可以在例外的情况下完成此流程!例如,如果func
希望使用大于 5 的数字,则可以执行以下操作:
int func(int a) {
if (a > 5) { return a; }
throw std::runtime_error("Empty");
}
int main() {
try {
int x = func(3);
// Do some stuff with x...
} catch(const std::exception &e) {
std::cout << "Looks like the num is " << e.what();
}
}
因此,如果事情进展顺利,您要么处理int
,要么,如果发生了不好的事情,您可以从异常中获取字符串并处理它。
您可以通过将两个不同的任务拆分为单独的函数并从那里继续执行来实现此目的。
#include <iostream>
using namespace std;int inputValue = 0;
int returnInt() {
std::cout << "Returning your int" << std::endl;
return inputValue;
}
string returnString() {
std::cout << "Returning your string" << std::endl;
return "Your string";
}
int main() {
std::cout << "Please type in a number" << "t";
std::cin >> inputValue;
if (inputValue > 5) {
returnInt();
}
else {
returnString();
}
}
相关文章:
- C++ 一个函数,可以根据接受的值返回两种类型之一
- C++指针中的这两种类型的值分配有什么区别?
- C++两种类型相互依赖
- 两种类型的构造函数重载
- 没有使用两种类型的字符串进行匹配的函数调用
- 声明具有两种类型的变量:"int char"
- 键入来自不同第三方库的两种类型,无需联合
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 如何在任何两种类型之间reinterpret_cast
- 如何检查两种类型是否相同,忽略const和参考
- 比较两种类型的多组以保持平等
- 这两种类型的结构的写法是一样的吗?
- 两种类型转换有何不同?
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 当两种类型相同时,专用于 C++ 模板函数
- 检查两种类型是否属于同一模板
- 模板结构可容纳两种类型,但当时只有一种
- 如何实现具有两种类型的类之一的类
- 如何在 Cython 中将C++中的模板化函数用于两种类型
- 穿越拥有两种类型值的BST