Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ Fusion Functional:使用默认参数调用函数_C++_Function_Metaprogramming_Function Pointers_Boost Fusion - Fatal编程技术网

C++ Fusion Functional:使用默认参数调用函数

C++ Fusion Functional:使用默认参数调用函数,c++,function,metaprogramming,function-pointers,boost-fusion,C++,Function,Metaprogramming,Function Pointers,Boost Fusion,是否可以使用函数调用具有默认参数的函数而不指定这些参数 Example: void foo(int x, int y = 1, int z = 2) { std::cout << "The sum is: " << (x + y + z) << std::endl; } ... // This should call foo(0). It doesn't work because the type of foo is void (*) (int, i

是否可以使用函数调用具有默认参数的函数而不指定这些参数

Example:

void foo(int x, int y = 1, int z = 2)
{
  std::cout << "The sum is: " << (x + y + z) << std::endl;
}

...

// This should call foo(0). It doesn't work because the type of foo is void (*) (int, int, int).
boost::fusion::invoke(foo, boost::fusion::vector<int>(0));

// Works
boost::fusion::invoke(foo, boost::fusion::vector<int, int, int>(0, 1, 2));
示例:
void foo(整数x,整数y=1,整数z=2)
{

std::cout您可以使用
bind
():

boost::fusion::invoke(boost::bind(foo,1,1,2),boost::fusion::vector(0));

您可以使用
bind
():

boost::fusion::invoke(boost::bind(foo,1,1,2),boost::fusion::vector(0));

谢谢,这似乎是一个合理的解决方案。我更感兴趣的是直接在函数声明中指定默认参数,但似乎无法将这些参数与invoke()结合起来。谢谢,这似乎是一个合理的解决方案。我更感兴趣的是直接在函数声明中指定默认参数,但似乎不可能将这些参数与invoke()结合起来。
struct foo  {
  void operator() (int x, int y = 1, int z = 2)  { /* ... */ }
};

// Works because the functor adds an indirection
boost::fusion::invoke(foo(), boost::fusion::vector<int>(0));
boost::fusion::invoke(boost::bind(foo, _1, 1, 2), boost::fusion::vector<int>(0));