gpt4 book ai didi

c++ - 默认多个参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:36 25 4
gpt4 key购买 nike

我有一个如下所示的类:

class Example {
Foo1 f1;
Foo2 f2;
Foo3 f3;
size_t hash;
};

请注意 FooX 总是不同的类。我想添加一个构造函数,它将值分配给每个 fX 元素并计算哈希值(用于缓存其值)。

但是我希望能够省略任意数量的参数并为类的相应成员分配默认值。显然我可以使用 C++ 的默认功能:示例(Foo1 f1 = DEFAULT4F1,Foo2 f2 = DEFAULT4F2,Foo3 f3 = DEFAULT4F3);但是,为了能够省略 f2,我需要省略我可能想要指定的 f3。然后我可以为每个可能的顺序编写一个构造函数,但是构造函数的数量随着元素的阶乘而增长,因此对于这种情况:

Example(Foo1 f1 = DEFAULT4F1, Foo2 f2 = DEFAULT4F2, Foo3 f3 = DEFAULT4F3);
Example(Foo1 f1 = DEFAULT4F1, Foo3 f3 = DEFAULT4F3, Foo2 f2 = DEFAULT4F2);
Example(Foo2 f2 = DEFAULT4F2, Foo1 f1 = DEFAULT4F1, Foo3 f3 = DEFAULT4F3);
Example(Foo2 f2 = DEFAULT4F2, Foo3 f3 = DEFAULT4F3, Foo1 f1 = DEFAULT4F1);
Example(Foo3 f3 = DEFAULT4F3, Foo1 f1 = DEFAULT4F1, Foo2 f2 = DEFAULT4F2);
Example(Foo3 f3 = DEFAULT4F3, Foo2 f2 = DEFAULT4F2, Foo1 f1 = DEFAULT4F1);

我不想在很多情况下指定相同的构造函数,因为在我的真实情况下有超过 3 个参数。我还想考虑转发它们的值(Foo&& argstd::forward(arg))

编辑:总结一下:所需的构造函数将像这样,但能够省略任何参数,并为它们使用默认值

Example(Foo1&& f1, Foo2&& f2, Foo3&& f3) :
f1(std::forward(f1)),
f2(std::forward(f2)),
f3(std::forward(f3)),
hash(doSomethingForIt())
{
}

最佳答案

这是一种解决方法,而不是 C++ 意义上的初始化。

因为您需要预先知道类(class)的所有成员,所以您已经知道他们:

class Example {
Foo1 f1;
Foo2 f2;
Foo3 f3;
size_t hash;
//default ctor, initializes all members with defaults defined somewhere
Example() : f1(defaultF1), f2(defaultF2), f3(defaultF3) {}
....

现在我们添加 setter :

  Example& setFoo1(Foo1 fo1 = defaultF1)
{
f1 = fo1;
return *this;
}

Example& setFoo2(Foo2 fo2 = defaultF2)
{
f2 = fo2;
return *this;
}
....

}; //class Example

然后是用法:

Example exple;
exple.setFoo2(someF2value).setFoo1(someF1value); //not all setFooX are used

请注意,我们可以按任何顺序调用 setFooX()。

关于c++ - 默认多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com