C++ 指向具有默认参数的函数的指针
假设我们有一个函数C++ 指向具有默认参数的函数的指针,c++,c++14,C++,C++14,假设我们有一个函数 int foo (std::string, size_t = 0) { return 42; } 我想用包装器函数调用这个函数 template <typename T> auto boo (std::string s) { return (*T::value) (s); } 现在的用法是这样的 struct Foo : std::integral_constant<int (*) (std::string, size_t), &foo&
int foo (std::string, size_t = 0) { return 42; }
我想用包装器函数调用这个函数
template <typename T>
auto boo (std::string s) {
return (*T::value) (s);
}
现在的用法是这样的
struct Foo : std::integral_constant<int (*) (std::string, size_t), &foo> {};
std::cout << boo<Foo> ("b") << "\n"; // 42
就我而言,如果我使用指向没有包装器模板函数的函数的指针
using Ptr = int (*) (std::string, size_t);
Ptr p = &foo;
auto x = p ("10");
然后,在所有提到的GCC版本中都会出现错误
根据后一个示例,这是否意味着即使指向的函数不需要第二个参数,我也不能在不明确指定第二个参数的情况下使用指针?
根据主要示例,这是否意味着GCC 5.3.1在与模板包装器相关的情况下错误地实现了此行为?使用带有默认参数的函数使用其任何可能的签名都可以,但您自己也引入了不一致性。您已经将
Foo
明确定义为包装一个指向两个参数函数的指针,因此最好使用两个参数调用它。如果要使用一个参数调用它,请将其用作指向一个参数函数的指针
我不知道你想用积分常数实现什么。可能重复“就我而言,如果我使用指向函数的指针”,你是否错过了“那么X应该发生”?std::积分常数用于在函数的值成员中存储指向函数的指针。不,我明白了。我只是不知道你为什么不喜欢只使用函数指针。通常,
integral\u constant
用于某些编译时分派技巧(如元组长度),但这些技巧实际上并不适用于函数指针。
using Ptr = int (*) (std::string, size_t);
Ptr p = &foo;
auto x = p ("10");