具有union返回类型的函数调用

时间:2014-08-13 08:45:04

标签: c++ error-handling

我必须在我的代码中使用this库函数。此函数返回struct,包括union这样的内容:

union  (
     int   int_value;
    double   double_value;
    const char *   text_value;
} value;

每次调用此函数时,我都必须使用switch语句检查返回类型,就像引用页面中的示例一样。真正的问题是 我必须在我的代码中多次使用此函数,准确地说是15次。每次检查返回类型非常非常令人沮丧,如果它不是很糟糕,结果代码非常难看。我试图将此代码包装在返回类型为auto的成员函数中。但它甚至没有编译。

  • 我该怎么做?
  • 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

您的示例代码不适合现实世界的代码!

如果你有一个作为返回类型的联合,你必须知道联合的哪个字段持有有效值。所以我希望你有类似的东西:

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,它将此struct / union作为参数。这个类现在可以为你做任何类型的测试,类型安全!并自动。它还可以生成(工厂模式)子类,它可以执行仅对给定值类型有效的所有操作。

class UnionHandler
{
     public:
         UnionHandler( const SOME_TYPE& val )
         {
              switch ( val.valid_type) 
              {
                  case... whatever you want
              }
         }

     bool Check() { // whatever you want }

}

但是根本就是:避免工会!!!!!!!!