带联合返回类型的函数调用

Function call with a union return type

本文关键字:函数调用 返回类型      更新时间:2023-10-16

我必须在我的代码中使用这个库函数。这个函数返回包含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 }
}

但是绝对要避免联合!!!!!!!!