我不确定标准允许我尝试什么,甚至可能没有意义,所以通过一切手段随时纠正我。使用可变参数类型参数的变量函数
我试图将一个可变数量的std::function
对象传递给接受可变参数的函数,并接受可变参数模板参数。模板参数指定返回类型中进行传递的功能函数的签名看起来像这样:
template <typename ... TRets>
void DoStuff(std::function<TRets...()> funcs...)
什么我试图做的是从每个funcs
传入的传递返回值到另一个以扩展价值形式接受它们的函数。例如。 std::make_shared<TType>(funcs()...);
我正在使用g ++ 7.1.1和--std=c++17
标志,导致编译器发生故障。很明显,它不应该排除故障,但是标准中是否有上述代码无效的内容?或者,是否有不同的语法来完成这个目标?
为了完整起见,这里是一个最低限度的工作(对工作的一些定义)例如:
#include <functional>
#include <memory>
class MyClass {
public:
int m_a;
double m_b;
MyClass(int a, double b) : m_a(a), m_b(b) {};
};
template <typename TReturn, typename ... Args>
std::shared_ptr<TReturn> CallFunctions(std::function<Args...()> funcs...) {
// Do stuff here
return std::make_shared<TReturn>(funcs()...);
}
int main(int argc, char * argv[]) {
auto x = CallFunctions<MyClass, int, double>(
[]() { return 5; },
[]() { return 3.14; }
);
return 0;
}
编辑,以显示我原来的问题的更好的意图
你到底想干什么? – Justin
如果编译器出现故障,您可能需要提交错误报告。 – Justin
您是否期望每个传递给'CallFunctions'的函数都不带任何参数并返回一个值? – Justin