Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 参数数目可变的函数,作为模板参数传递_C++ - Fatal编程技术网

C++ 参数数目可变的函数,作为模板参数传递

C++ 参数数目可变的函数,作为模板参数传递,c++,C++,其思想是将foo(…)作为函数参数,并可选地调用foo(…)。 我可以做到这一点,就像这样: template <typename T, typename FUNCTION, typename... ARGS> T value_or(const optional<T>& value, const FUNCTION& fp, const ARGS&... args) { if (value) return *value;

其思想是将foo(…)作为函数参数,并可选地调用foo(…)。 我可以做到这一点,就像这样:

template <typename T, typename FUNCTION, typename... ARGS>
T value_or(const optional<T>& value, const FUNCTION& fp, const ARGS&... args)
{
    if (value)
        return *value;
    else
        return fp(args...);
}
有没有办法做到这一点

注意:我所描述的函数值_的意思是,如果std::optional有效,则函数foo将从不调用。 这意味着,避免了潜在的昂贵通话。
使用经典函数std::optional::value_或(foo()),无论std::optional的状态如何,都将始终调用foo()?或者它是
boost::可选的
?您能具体说明一下吗?您试图用
值\u或
函数解决的实际问题是什么?为什么要调用
foo
函数并将其结果传递给
value\u或
函数?这使得调用例如
foo0
实际上是在调用
value\u或
时发生的,它不再是有条件的。请参阅我的附加说明。因此基本上,您希望根据
x
的(运行时!)值延迟计算第二个参数?不幸的是,这是C++,不是函数语言……@是的,你总结我的尝试。
int foo0() { return 10; }
int foo1(int x) { return x; }
int foo2(int x, double ) { return x; }

optional<int> x;
value_or(x, foo0);
value_or(x, foo1, 34);
value_or(x, foo2, 34, 5.0);
value_or(x, foo0());
value_or(x, foo1(34));
value_or(x, foo2(34, 5.0));