假设我定义了一个像下面
pack
这样的类(针对这个问题进行了简化),其中构造函数接收两个可调用对象并将它们用作成员函数:
#include <iostream>
struct callable1{
void operator()(){
std::cout << "callable 1\n";
}
};
struct callable2{
void operator()(){
std::cout << "callable 2\n";
}
};
template<typename T1, typename T2>
class pack{
public:
pack(T1 t1, T2 t2): f1{t1}, f2{t2} {}
T1 f1;
T2 f2;
};
int main(int, char**) {
pack<callable1, callable2> p{callable1{}, callable2{}};
p.f1();
p.f2();
return 0;
}
产生以下输出
callable 1
callable 2
您将如何概括
pack
,以便您可以为其构造函数提供任意数量的可调用对象,一个或多个,并将它们实现为成员函数?如果构造函数接收到两个可调用对象,如上所示,它将有效地生成上面显示的代码和行为。理想情况下不使用宏。
奖金:而不是这样称呼它
p.f1();
p.f2();
您可以使用提供给构造函数的对象的名称或类型来调用它。对于上面第一个代码块中使用的可调用对象,您可以调用
p
的成员函数,如下所示
p.callable1();
p.callable2();