C++ 如何将联合作为函数参数传递,而不首先定义它?
是否可以在函数调用中定义一个临时联合,而不是以前定义它,然后在参数中传递它 例如:C++ 如何将联合作为函数参数传递,而不首先定义它?,c++,C++,是否可以在函数调用中定义一个临时联合,而不是以前定义它,然后在参数中传递它 例如: union data_t{ double delaySeconds; float scale; float rotation; }; void someFunction(data_t){} 现在我想调用someFunction,使用union中合适的任何元素:
union data_t{
double delaySeconds;
float scale;
float rotation;
};
void someFunction(data_t){}
现在我想调用someFunction
,使用union中合适的任何元素:
someFunction(WHAT DO I PUT HERE);
例如,如果要传递给一个函数,该函数需要一个包含构造函数的类型,则可以在函数调用中定义临时类型。但我试过各种方法来对付这对组合,但都没有成功。例如,假设我想传递一个分配给scale
的浮点:
someFunction(data_t.scale(2.0));
您可以为您的联合定义一个构造函数来初始化成员。但是,您需要一种机制来区分设置了哪个字段。下面,我定义了一个helper
enum
,并扩展您的数据以允许继承和成员区分
enum data_t_type { DelaySeconds, Scale, Rotation };
struct data_t {
union {
double delaySeconds;
float scale;
float rotation;
};
union {
unsigned char flags;
struct {
unsigned char isDelaySeconds : 1;
unsigned char isScale : 1;
unsigned char isRotation : 1;
};
};
data_t () : flags(0) {}
};
现在,初始化实际上是使用模板完成的,该模板将数据类型作为参数
template <data_t_type> struct data_type {};
template <> struct data_type<DelaySeconds> : data_t {
data_type (double x) { delaySeconds = x; isDelaySeconds = 1; }
};
template <> struct data_type<Scale> : data_t {
data_type (float x) { scale = x; isScale = 1; }
};
template <> struct data_type<Rotation> : data_t {
data_type (float x) { rotation = x; isRotation = 1; }
};
模板结构数据类型{};
模板结构数据类型:数据{
数据类型(双x){delaySeconds=x;isDelaySeconds=1;}
};
模板结构数据类型:数据{
数据类型(浮点x){scale=x;isScale=1;}
};
模板结构数据类型:数据{
数据类型(浮点x){rotation=x;isRotation=1;}
};
现在,您可以这样调用函数:
someFunction(data_type<Scale>(2.0));
someFunction(数据类型(2.0));
由于数据类型
是数据类型
,someFunction()
得到了正确的类型。如果是我,我会像瘟疫一样避免联合
。。。如果使用正确,联合会可能非常强大。为什么不使用重载?@Pubby更好的解决方案可能是为此使用模板。我只是想避免编写一堆重载函数,特别是当data\u t
有超过几个这样的潜力时contents@Fellowshee当前位置在这一点上,我支持Pubby。一个可能需要秒、角度或比例因子的函数听起来像是一个设计问题——你需要在函数内部进行一些手动调度,而你不能用union来完成,因为没有办法知道哪个成员是初始化的。(而且模板似乎也不是正确的工具)。重载或只是为不同的操作使用不同的函数听起来更理智。有趣的是,这与我所做的相似,但是我在这里遇到了一个相关的问题:<代码> VEC3可能是你的问题。在C++编程参考中搜索BITFEAR或BIT字段。这个答案对我的问题来说是一个非常有趣的解决方案,谢谢。我已经搜索了一会儿,看看你的冒号语法在代码>未签名CHARISISLAYS秒:1;但是我不能。这是一种对字符的替代吗?