簡體   English   中英

具有默認參數的函數指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM