通过可变参数模板应用属于其他类的函数
Apply functions belonging to other classes through variadic templates
假设我有三个类,ClassA
、ClassB
和ClassC
。这三个类都有一个叫做 updateValue(int)
的函数。然后我有一个名为 Controller
的控制器类。谁的构造函数模板
class Controller
{
public:
template <class...Classes>
Controller(Classes & ...classes); // maybe initialize a tuple?
void setValues(int val)
{
// unpack whatever data structure and call each classes updateValue(int)
}
private:
std::tuple<Classes...classes> packedClasses; // Not sure if this is good idea? This will not compile
};
如您所见,我希望能够从某些数据结构中获取类,并调用它们的函数。例如,在主要情况下,我将有:
int main()
{
ClassA A;
ClassB B;
ClassC C;
Controller controller1(A,B);
Controller controller2(A,C);
Controller controller3(B,C);
Controller controller4(A,B,C);
controller4.setValues(20);
}
每个类都有自己的更新值的方式,例如ClassA
有setValue(int)
,ClassB
有setInt(int)
,ClassC
有updateNumber(int)
。我的计划是将函数updateValue
写入每个类中,这些类将调用它们的 setter 函数。但是,我不确定如何实现我想要做的事情。如何解压缩所有类并调用它们的函数updateValue(int)
?
在当前界面中,您可以执行以下操作:
class Controller
{
public:
template <class...Classes>
Controller(Classes&... classes)
{
mF = [&](int val) { (classes.updateValue(val), ...); }; // Fold expression from C++17
}
void setValues(int val)
{
mF(val);
}
private:
std::function<void(int)> mF;
};
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 异常属于C++中的线程还是进程
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 通过可变参数模板应用属于其他类的函数
- 函数,这些函数接收属于其他文件中类的对象
- 执行属于其他进程的外部功能