【发布时间】:2021-05-06 13:14:24
【问题描述】:
我有一个可变参数模板仿函数类:
template <typename Result, typename... Arguments>
class Functor
{
public:
using FunctionType = std::function<Result(Arguments...)>;
Result operator() (const Arguments&... arguments) { return Function(arguments); }
std::string GetName() { return Name; }
Functor(const std::string& name, const FunctionType& function) : Name(name), Function(function) { }
private:
std::string Name;
FunctionType Function;
}
还有一个可变参数模板函数:
template <typename... Functors>
void Function(const Functors&... functors) { }
假设我已经声明了一些Functors 并想在Function 中使用它们:
Functor<int, int> f
(
"f",
[](int x) -> int { return 2 * x - 1; }
);
Functor<int, int, int> g
(
"g",
[](int x, int y) -> int { return x + 2 * y - 3; }
);
Function(f, g);
在Function内部,我想找出参数包中传递给它的Functor满足某个条件,如果满足,调用函子。像下面的伪代码:
template <typename... Functors>
void Function(const Functors&... functors)
{
foreach (Functor functor in functors)
{
if (functor.GetName() == "f")
{
functor(); // the functor can have different parameter lists so this is another problem
}
}
}
我想知道是否有办法做到这一点。我还想知道,由于Functors 可以有不同的参数列表,即使我能够找到正确的Functor 来调用它们,我该如何调用它们?假设有一个std::vector<int>,当Functor 以三个ints 作为参数时,是否可以将前三个ints 传递给Functor?
【问题讨论】:
标签: c++ variadic-templates variadic-functions functor variadic