具有可变数量参数的函数,作为模板参数传递

时间:2017-03-18 08:04:20

标签: 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;
    else
        return fp(args...);
}

例如,我可以这样做:

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));

有没有办法实现这个目标?

注意:我所描述的函数value_or的兴趣在于,如果std :: optional有效,函数foo 永远不会被调用。 这意味着,避免了潜在的昂贵呼叫。 使用经典函数std :: optional :: value_or(foo()),无论std :: optional的状态如何,都会调用foo()。

0 个答案:

没有答案