使用默认参数运行的指针

时间:2018-01-10 12:39:26

标签: c++ c++14

让我们假设我们有一个函数

struct Foo : std::integral_constant<int (*) (std::string, size_t), &foo> {};

我想用包装函数

调用这个函数
std::cout << boo<Foo> ("b") << "\n"; // 42

因此,error: too few arguments to function 应包含指向适当函数的指针,因此我将其声明为

using Ptr = int (*) (std::string, size_t);
Ptr p = &foo;
auto x = p ("10");

现在用法看起来像这样

 
file{'EXTRACTED_PATH/ant.properties':
ensure: present
} 

在GCC 5.3.1上,这段代码编译得很好,但是在GCC 6.3.1和GCC 7.2.1上,编译失败了

$install_jar_location=$::getinstallerpath

据我所知,如果我使用指向没有包装模板函数的函数的指针

$installer_location="/home/oracle/Installer"

然后在所有提到的GCC版本中都出现错误。

根据后一个例子,是否意味着我不能在没有明确指定第二个参数的情况下使用指针,即使指向函数不需要它?

根据主要示例,是否意味着GCC 5.3.1与模板包装器一起错误地实现了这种行为?

1 个答案:

答案 0 :(得分:1)

使用具有默认参数的函数使用任何可能的签名都没关系,但是您自己引入了不一致。您已经将Foo专门定义为包含指向双参数函数的指针,因此您最好使用两个参数调用它。如果要使用一个参数调用它,请将其用作指向单参数函数的指针。

我不确定您使用integral_constant尝试完成的任务。