C++可变参数模板

代码来源于施磊老师的C++高级课程

#include 
#include 
#include 
#include 

using namespace std;

template 
class myFunction
{
};

/*
template 
class myFunction
{
public:
    using PFUNC = R (*)(A1);
    myFunction(PFUNC pfunc) : pfunc_(pfunc) {}
    R operator()(A1 arg)
    {
        return pfunc_(arg);
    }

private:
    PFUNC pfunc_;
};

template 
class myFunction
{
public:
    using PFUNC = R (*)(A1, A2);
    myFunction(PFUNC pfunc) : pfunc_(pfunc) {}
    R operator()(A1 arg1, A2 arg2)
    {
        return pfunc_(arg1, arg2);
    }

private:
    PFUNC pfunc_;
};
*/

// 可变参模板类
template  //...表示类型可变参数
class myFunction
{
public:
    using PFUNC = R (*)(A...);
    myFunction(PFUNC pfunc) : pfunc_(pfunc) {}
    R operator()(A... args)
    {
        return pfunc_(args...);
    }

private:
    PFUNC pfunc_;
};

void Hello(string str)
{
    cout << str << endl;
}

int sum(int a, int b)
{
    return a + b;
}

int main()
{
    myFunction func1 = Hello;
    func1("Hello world!"); // func1.operator()("Hello world!")

    myFunction func2(sum);
    cout << func2(10, 20) << endl;
    return 0;
}

你可能感兴趣的:(c++,算法,开发语言)