Win*_*ten 2 c++ templates overloading
我刚刚开始学习C++中的模板,并且不熟悉术语,但这就是我想要做的.假设我有三个功能.
double fa(double a)
{
return a;
}
double fb(double a, double b)
{
return (a+b);
}
double fc(double a, double b, double c)
{
return (a+b+c);
}
Run Code Online (Sandbox Code Playgroud)
假设我想将函数fa,fb或fc传递给一个名为compute的新函数:
void compute(double (*func)(double))
{
func(1);
std::cout << "1 argument here";
}
void compute(double (*func)(double, double))
{
func(1,2);
std::cout << "2 arguments here";
}
void compute(double (*func)(double, double, double))
{
func(1,2,3);
std::cout << "3 arguments here";
}
Run Code Online (Sandbox Code Playgroud)
有没有办法定义一个函数"计算"而不重载函数,而是使用模板?所以我可以传递一个具有任意数量参数的函数.
Ben(另一个Ben)已经建议你想要的是可变参数模板.
这是一个在可变数量的参数上添加的仿函数:
struct {
double operator()(double first) const
{
return first;
}
double operator()(double first, double second) const
{
return first + second;
}
template<typename... T>
double operator()(double first, double second, T... t) const
{
return (*this)(first + second, t...);
}
} variadic_add;
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它:
template<typename Reducer>
void compute(Reducer reduce)
{
reduce(1);
std::cout << "1 arguments here";
reduce(1,2);
std::cout << "2 arguments here";
reduce(1,2,3);
std::cout << "3 arguments here";
reduce(1,2,3,4);
std::cout << "4 arguments here";
}
compute(variadic_add);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |