gpt4 book ai didi

C++17 - 可变模板参数 - 使用模板参数调用先前返回值的类方法

转载 作者:行者123 更新时间:2023-12-02 02:18:13 25 4
gpt4 key购买 nike

我有这个代码:

struct Foo{
int sum;

Foo() : sum(0) {}
Foo(int x) : sum(x) {}

Foo bar(int x){
return Foo(sum + 1);
}

Foo bar(std::vector<int> x){
return Foo(sum + 1);
}

Foo bar(const char* str){
return Foo(sum + 1);
}
};


template <typename ... T>
int foo(T ... args){
Foo foo;

//(foo.bar(args), ...);
return foo.sum;
}

int main() {
foo(1, 2, "hello", std::vector<int>());
return 0;
}

我想创建这样的调用层次结构:

Foo foo;
foo = foo.bar(1);
foo = foo.bar(2);
foo = foo.bar("hello");

基于可变参数模板参数args

我正在查看折叠表达式,但这似乎没有按照我的需要工作。我可以折叠要单独调用的方法,但无法根据前一个方法的结果调用下一个方法。

有什么办法可以做到这一点吗?

最佳答案

您可以使用折叠表达式。

((foo = foo.bar(args)), ...);

我们需要在赋值周围添加一个额外的 () 以使编译器接受语法。我假设这就是你想要的?我真的不知道代码应该做什么......

编辑:正如@AVH 所指出的,在这里进行左折或右折将会对顺序产生影响。上面的右折叠将从最后一个参数开始调用成员函数,并向后执行。左折可能就是您想要的,但会起到相反的作用。

(..., (foo = foo.bar(args)));

编辑 2:最后发现逗号运算符强制从左到右求值,因此在这种情况下,我们如何折叠表达式实际上并不重要。如果我们折叠 之外的其他东西, 可能会很重要。

关于C++17 - 可变模板参数 - 使用模板参数调用先前返回值的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66857629/

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