带联合返回类型的函数调用
Function call with a union return type
我必须在我的代码中使用这个库函数。这个函数返回包含union
的结构体,如下所示:
union (
int int_value;
double double_value;
const char * text_value;
} value;
每次调用该函数时,我必须使用switch语句检查返回类型,就像参考页面中的示例一样。真正的问题是我必须在我的代码中使用这个函数不止一次,准确地说是15次。每次检查返回类型是非常非常令人沮丧的,如果不是混乱的话,结果代码是非常丑陋的。我试图将此代码包装在返回类型为auto的成员函数中。但是它甚至没有编译。
- 我该怎么做?
- 正确的做法应该是什么?
您的示例代码将不适合现实世界的代码!
如果你有一个联合作为返回类型,你必须知道联合的哪个字段持有一个有效值。所以我希望你有这样的东西:
struct SOME_TYPE
{
enum { IS_TEXT, IS_INT, IS_DOUBLE } valid_type;
union return_val
{
char* text_val;
int int_val;
double double_val;
}
};
如果你的返回类型包含这样的类型信息(这是必须的),很容易创建casting class
,它把这个结构体/联合作为参数。这个类现在可以为你做任何类型的测试,类型安全!和自动。它还可以生成(工厂模式)子类,这些子类可以执行只对给定值类型有效的所有操作。
class UnionHandler
{
public:
UnionHandler( const SOME_TYPE& val )
{
switch ( val.valid_type)
{
case... whatever you want
}
}
bool Check() { // whatever you want }
}
但是绝对要避免联合!!!!!!!!
相关文章:
- 如何获取std::result_of函数的返回类型
- 函数模板返回类型
- 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- 递归函数的返回类型推导
- 将成员函数的返回类型引用到C++中的自定义类
- 如何使用 std::invoke_result_t 获取函数的返回类型
- 为什么将函数的返回类型从结构节点*更改为void后,链表的元素没有显示create_ll和显示?
- 如何定义依赖于参数包转换的函数的返回类型
- 在类定义中推导内联静态成员函数的返回类型
- 我可以推导作为模板Agument传递的函数的返回类型吗
- 如果函数是在类的主体中定义的,我是否需要在成员函数的返回类型中指定 typename?
- C ++ DLL导入:函数调用返回错误的结果
- 如何在C++中比较 lambda 函数的返回类型?
- 推断成员函数的返回类型
- 函数与返回类型 node* 与 C++ 中的 OOP 结合使用
- 为什么C++哈希函数的返回类型是 std::size_t,而不是独立于平台的类型?
- 当我同时将 T& 和 T 作为同名函数的返回类型时,如何使用 T& 调用函数
- 在c++中,是否有可能获取函数的返回类型,以便在不调用该函数的情况下声明该变量?
- c++调用约定是否受标准约束,因为在声明fn时不需要定义函数的返回类型
- 将函数的返回类型用作另一个模板函数调用