如何将多个可变参数模板元组类组合成一个类?
How to combine multiple variadic templated tuple classes into one class?
我已经改变了我最初的问题,而是模板化整个类并将其放置在可变参数元组中。现在,我可以按照我希望创建它们的方式使用 getter 和 setter。但是,现在我正在尝试向前迈出一步,将各个控制器合并为一个控制器。
#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);
我已经看过这篇文章,讨论加入可变参数模板,但我认为这返回了一个类型(?)而不是一个类。我还尝试创建两个重载类,但我认为我没有正确创建重载:
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++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 类内部和外部静态 constexpr 元组之间的差异
- 可变参数模板与使用元组在参数中添加不同的数据对
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- boost::包含提升单元的元组的哈希值
- 如何将多个可变参数模板元组类组合成一个类?
- 在循环中组合元组
- 正在展开/重新组合宏元组
- 获取级联元组类型;组合result_of和tuple_cat