[英]Pointer to function with default arguments
假設我們有一個函數
int foo (std::string, size_t = 0) { return 42; }
我想使用包裝器函數調用此函數
template <typename T>
auto boo (std::string s) {
return (*T::value) (s);
}
因此, T
應該包含一個指向適當函數的指針,所以我這樣聲明它
struct Foo : std::integral_constant<int (*) (std::string, size_t), &foo> {};
現在用法看起來像這樣
std::cout << boo<Foo> ("b") << "\n"; // 42
在GCC 5.3.1上,此代碼可正常編譯,但在GCC 6.3.1和GCC 7.2.1上,此操作無法編譯並顯示錯誤
error: too few arguments to function
就我而言,是否使用沒有包裝模板函數的函數的指針
using Ptr = int (*) (std::string, size_t);
Ptr p = &foo;
auto x = p ("10");
那么該錯誤會出現在所有提及的GCC版本中。
根據后一個示例,這是否意味着即使指向函數不需要第二個參數,我也不能使用沒有明確指定第二個參數的指針?
根據主要示例,這是否意味着GCC 5.3.1與模板包裝程序有關地錯誤地實現了此行為?
可以使用帶有任何可能簽名的帶有默認參數的函數,但是您自己引入了不一致。 您已經將Foo
專門定義為包裝指向兩個參數的函數的指針,因此最好使用兩個參數來調用它。 如果要使用一個參數調用它,請將其用作一個單參數函數的指針。
我不確定您要使用integrate_constant完成什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.