我有一個函式指標,我需要將它傳遞給一個需要std::function. 采用 的函式std::function是模板化的,并使用std::function的引數來推導引數包,這意味著隱式轉換將不起作用。
我可以std::function自己構建,但是傳遞的函式有很多引數,將它們寫入 的模板括號中是std::function不可持續的,因為我需要經常使用傳遞給該函式的許多類似函式來執行此操作。
有沒有辦法std::function通過某種形式的推導將函式指標轉換為 a而不指定回傳型別和引數?
這是我迄今為止嘗試過的:
template <auto* F>
struct stdfunc {};
template <class Ret, class... Args, auto (*F)(Args...) -> Ret>
struct stdfunc<F>
{
typedef std::function<Ret(Args...)> type;
};
上面的代碼不能按預期作業。我在這個答案中找到了語法。在那種情況下,它沒有用于此目的,但肯定有一種方法可以使用這種技術實作我想要做的事情?似乎所有的碎片都在那里,我只需要把它們放在正確的地方。
我在正確的軌道上嗎?
uj5u.com熱心網友回復:
我建議:
template<typename Func>
auto make_function(Func ptr)
{
return std::function<std::remove_pointer_t<Func>>(ptr);
}
然后簡單地傳遞“make_function(my_func)”。
(感謝 Remy Lebeau 建議使用“auto”)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380304.html
下一篇:使用可變引數模板列印類物件
