模板化类,其中模板参数用于定义成员函数

问题描述 投票:0回答:0

假设我定义了一个像下面

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();
c++ templates metaprogramming
© www.soinside.com 2019 - 2024. All rights reserved.