我必须在我的代码中使用this库函数。此函数返回struct,包括union
这样的内容:
union (
int int_value;
double double_value;
const char * text_value;
} value;
每次调用此函数时,我都必须使用switch语句检查返回类型,就像引用页面中的示例一样。真正的问题是 我必须在我的代码中多次使用此函数,准确地说是15次。每次检查返回类型非常非常令人沮丧,如果它不是很糟糕,结果代码非常难看。我试图将此代码包装在返回类型为auto的成员函数中。但它甚至没有编译。
答案 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 }
}
但是根本就是:避免工会!!!!!!!!