簡體   English   中英

如何制作指向模板函數的指針?

[英]How can i make pointer to a template function?

我有一個模板排序函數,它將指向另一個函數的指針作為參數來定義排序規則。

template<typename T>
void sort(T* arr, int size, function<bool(T, T)>& comparer);

我想用 lambda 表達式調用這個函數

sort(arr, size, [](int num1, int num2) { if (num1 > num2) { return true; } else { return false; } });

但是我有一個錯誤:

錯誤(活動)E0304 沒有重載函數“sort”的實例與參數列表匹配

有沒有辦法創建指向模板函數的指針? 我怎樣才能做到這一點?

模板參數推導將嘗試從第一個參數T* arr和第三個function<bool(T, T)>& comparer推導出T

這將失敗,因為 lambda 實際上沒有任何T類型function<bool(T, T)> (它只能轉換為一個。)

在函數模板中,函數對象通常由模板參數直接獲取,而不是作為std::function

template<typename T, typename F>
void sort(T* arr, int size, F comparer);

或者

template<typename T, typename F>
void sort(T* arr, int size, F&& comparer);

取決於您是想要函數對象的副本還是只是一個引用。

  1. 你可能想要一個 const 引用。
  2. 您已明確轉換為std::function
#include <functional>

template <typename T>
void sort(T* arr, int size, std::function<bool(T, T)> const & comparer)
{
        // sort
}

int main()
{
    int const size = 10;
    int arr[size];
    sort(arr, size, std::function{[](int num1, int num2) {
        if (num1 > num2) {
            return true;
        } else {
            return false;
        }
    }});
}

如果您可以更改sort的簽名,請參閱walnut 的回答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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