c++ - 如何重载具有相同类型的构造函数?
问题描述
例如,让我们有一些用 4 个数字做一些数学运算的结构,我们想在两个构造函数中用特定值做一些特定的事情,是否可以以不使用任何附加值的方式重载构造函数(某种模式切换)?
struct Coolness
{
float a = float();
float b = float();
float c = float();
float d = float();
Coolness(float a, float b)
{
/* do stuff here*/
}
这里的类型相同但值不同
Coolness(float c, float d)
{
/* do other stuff here*/
}
};
解决方案
您可以使用标签结构来区分。例如,
struct Coolness {
struct Joe{};
struct Fonz{};
float a = float();
float b = float();
float c = float();
float d = float();
Coolness(Joe, float a_, float b_) : a{a_}, b{b_} {
/* do stuff here*/
}
Coolness(Fonz, float c_, float d_) : c{c_}, d{d_)} {
/* do other stuff here*/
}
static Coolness MakeFonz(float c, float d) {
return Coolness{Fonz{}, c, d};
}
};
int main() {
Coolness x{Coolness::Joe{}, 7.0f, -3.333f};
Coolness y{Coolness::Fonz{}, 1.0f, 2.0f};
Coolness z = Coolness::MakeFonz(3.0f, 4.0f);
}
更新:添加了一个使用示例,并添加了一个静态工厂函数来帮助说明如何使用该技术。
没有标签结构的多个静态工厂函数也可用于区分构造对象的不同方式,而不是使用任何公共构造函数。
推荐阅读
- random - 使用 map reduce 进行采样
- java - 可完成的未来是否被中断或 buttonView 是否有某种超时
- spring-boot - 重用 Spring Spel Expression 实例是否安全?
- javascript - Node.js 对象语法
- html - 垂直拉伸主轴水平的子弹性框
- discord - Discord.py 嵌入不起作用/不发送 ctx
- python - 三元运算符 Python 单变量赋值 python 3.8
- swift - Swift 编译器可以为我的应用程序创建一个可执行文件吗?
- c++ - 通过字符串获取类成员
- python-sphinx - Python Sphinx 验证和更新架构