gpt4 book ai didi

c++ - 如何将多个可变参数模板元组类合并为一个类?

转载 作者:行者123 更新时间:2023-11-27 22:34:55 24 4
gpt4 key购买 nike

我已经从 my original question 改变了我的方法而是将整个类模板化并将其放在可变元组中。我现在可以按照我希望创建它们的方式使用 getter 和 setter。但是,现在我正尝试更进一步,将各个 Controller 组合成一个 Controller 。

#ifndef CONTROLLER_HPP
#define CONTROLLER_HPP

#include <functional>
#include <vector>
#include <iostream>
#include <utility>

template<typename...Classes>
class Controller
{
public:
Controller(Classes&...objects) : objects(objects...){}

void setValues(int value)
{
std::apply([&](auto&...x) { (x.updateValue(value),...);}, objects);
}

void getValues(std::vector<int> &values)
{
std::apply([&](auto&...x) { (values.push_back(x.get()),...);}, objects);
}
private:
std::tuple<Classes&...> objects;
};

#endif

有了这个我可以做以下事情:

classA A;
classB B;
classC C;
classD D;
classE E;
classF F;
classG G;

Controller controller1(A,B,C);
Controller controller2(D,E);
Controller controller3(F,G);

controller1.setValues(20);
controller2.setValues(13);
controlelr3.setValues(32);

但是,我想更进一步,像这样将两者结合起来:

Controller master(controller1,controller2,controller3);
master.setValues(40);

我看过at this post talking about joining variadic templates ,但是我认为这会返回一个类型(?)而不是一个类。我还尝试创建两个重载类,但我认为我没有正确创建重载:

template<typename...Classes>
class Controller
{
public:
Controller(Classes&...objects) : objects(objects...){}

void setValues(int value)
{
std::apply([&](auto&...x) { (x.updateValue(value),...);}, objects);
}

void getValues(std::vector<int> &values)
{
std::apply([&](auto&...x) { (values.push_back(x.get()),...);}, objects);
}
private:
std::tuple<Classes&...> objects;
};

template<Controller<typename ... > class Controllers, typename ...Classes>
class Controller<Controllers<Classes&...classes>...>
{
// create a new controller that takes all the combined classes
};

如何将任意数量的模板可变参数模板类组合成一个类?我确实有能力使用 C++17。

最佳答案

template<typename...Classes>
class Controller
{
Controller( std::tuple<Classes&...> tup ):objects(tup) {}
public:
template<class...Rhs>
Controller<Classes..., Rhs...> operator+( Controller<Rhs...> rhs ) const {
return std::tuple_cat( objects, rhs.objects );
}

...

给我们:

Controller master = controller1+controller2+controller3;
master.setValues(40);

关于c++ - 如何将多个可变参数模板元组类合并为一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55925770/

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