gpt4 book ai didi

c++ - 如何使用折叠表达式调用成员函数链

转载 作者:行者123 更新时间:2023-12-03 07:50:01 27 4
gpt4 key购买 nike

我有一个像这样的构建器类

class Builder
{
public:
Builder (SomeData someData);

template <class FooType, class... FooConstructorArgs>
Builder&& addFoo (FooConstructorArgs&&... args) &&
{
addInternal (new FooType (std::forward<FooConstructorArgs> (args)...);
return std::move (*this);
}
//...
}

现在有一个这样的函数

std::string createUuid();

template <std::constructible_from<std::string> FooType>
void bar (SomeData data)
{
auto builder = Builder (data).addFoo<FooType> (createUuid());

// do something fancy with that builder
}

但是,我真正想要的是这样的函数签名:

template <std::constructible_from<std::string>... FooTypes>
void bar (SomeData data)

对于每种类型,addFoo 被调用,例如

addFoo<Bar, Baz> (data);

// expands internally to
auto builder = Builder (data).addFoo<Bar> (createUuid()).addFoo<Baz> (createUuid());

我通常知道折叠表达式的存在,但我无法弄清楚将其编写为折叠表达式的语法。我什至不确定折叠表达式是否支持链式成员函数调用。有人可以给我一个关于如何实现它的提示或者确认这确实是不可能的吗?

最佳答案

可以使用逗号运算符(,)来展开参数包

template <std::constructible_from<std::string>... FooTypes>
void bar (SomeData data)
{
auto builder = Builder (data);
((builder = std::move(builder).addFoo<FooTypes>(createUuid())), ...);
}

关于c++ - 如何使用折叠表达式调用成员函数链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77460298/

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