【发布时间】:2021-08-06 19:20:25
【问题描述】:
我需要创建一个向量来存储具有不同数量参数的 void 函数。我为此使用了可变参数模板,但它不起作用。
#include <iostream>
#include <functional>
template<class...Types>
using MyFun = std::function<void(Types...)>;
std::vector<MyFun<>> operators;
template<class Lambda>
void addOperator(Lambda lambda)
{
operators.emplace_back(lambda);
}
int main()
{
auto f1 = [](int a, int b){std::cout<<a+b;};
auto f2 = [](double a, double b){std::cout<<a+b;};
addOperator(f1);
addOperator(f2);
return 0;
}
你能帮帮我吗?
【问题讨论】:
-
这个列表的目的是什么?你想如何调用这些函数?
-
如果您不知道这些函数的参数类型,您将如何使用它们?您可以使用
std::any的向量,但接下来呢? -
MyFun的每个实例化都是不同的不同类型。如果没有某种类型的擦除,您不能将它们存储在同一个容器中。std::function浮现在脑海中,但这不适用于不同的函数签名。你应该重新考虑你的设计。对于静态类型语言,这看起来不是一个好方法。 -
类似的问题经常出现。他们几乎从不谈论调用函数,或者一旦将它们放入容器中后如何处理它们,但这是重要的部分。考虑到您可以将任何东西放入
void*的容器中,但对于这样的容器几乎无能为力 -
这个问题显然受到XY problem的影响。 @JoungCPPser 请解释你为什么需要这个功能,你想要什么样的功能(不要描述你打算如何实现它,因为很明显它不起作用)。
标签: c++ function templates variadic-templates