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

hka*_*ncu 1 c++ error-handling

我必须在我的代码中使用这个库函数.这个函数返回struct包括这样的union东西:

union  (
     int   int_value;
    double   double_value;
    const char *   text_value;
} value;
Run Code Online (Sandbox Code Playgroud)

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

  • 我怎样才能做到这一点?
  • 这样做的正确方法是什么?

Kla*_*aus 6

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

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

struct SOME_TYPE
{
    enum { IS_TEXT, IS_INT, IS_DOUBLE } valid_type;

    union return_val 
    {
        char* text_val;
        int int_val;
        double double_val;
    }
 };
Run Code Online (Sandbox Code Playgroud)

如果你的返回类型包含这样的类型信息(这是必须的),那么很容易创建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 }

}
Run Code Online (Sandbox Code Playgroud)

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