如何将联合作为函数参数传递而不首先定义它
How to pass a union as a function parameter without defining it first?
是否有可能在函数调用内部定义临时联合,而不是之前定义它,然后在参数中传递它?
的例子:
union data_t{
double delaySeconds;
float scale;
float rotation;
};
void someFunction(data_t){}
现在我想调用someFunction
,使用任何合适的联合元素:
someFunction(WHAT DO I PUT HERE);
例如,如果要传递给一个期望包含构造函数的类型的函数,则可以在函数调用中定义临时函数。但我尝试了很多方法都没有成功。例如,假设我想传递一个分配给scale
的浮点数:
someFunction(data_t.scale(2.0));
可以为联合定义一个构造函数来初始化成员。但是,您需要一种机制来区分设置了哪个字段。下面,我定义一个帮助器enum
,并扩展data_t
以允许继承和成员区分。
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
作为参数。
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; }
};
现在,你可以像这样调用你的函数:
someFunction(data_type<Scale>(2.0));
由于data_type<>
是data_t
,所以someFunction()
得到了正确的类型
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 无法将共享指针作为参数传递给函数定义?
- 如何将参数传递到自定义比较C 中分类的函数
- 如何将定义(#define some_define)作为函数的参数传递
- 如何将一个或多个(未定义的数字)参数传递给函数
- 将定义 int 传递给函数作为参数
- 将标头中定义的 MyClass 作为函数参数传递给其他文件
- 将自定义参数传递到Qt/C++中的插槽
- 如何将类中定义的函数作为参数传递给函数
- 将多个逗号分隔的参数传递给自定义<<运算符
- 如何将参数传递到 Visual Studio 的自定义生成工具中
- 对于C++sort(),如何将参数传递给自定义比较函数
- 如何在不传递参数的情况下,将默认定义了参数的函数作为参数传递?C++
- 在c++中定义字符串并将其作为函数参数传递的不同方式的差异
- 如何引用作为模板参数传递的派生类中定义的类型
- 如何将联合作为函数参数传递而不首先定义它
- 如何向自定义异常传递参数