簡體   English   中英

將具有多個參數的函數作為模板參數傳遞

[英]Passing functions with multiple parameters as a template parameter

原始問題

如何傳遞帶有帶有參數的函數作為模板?

原因是我已經更新了我的Queue數據結構,就像在另一個問題中告訴我的那樣,即如何確定函數參數是否為函數

現在,唯一的問題是它僅接受不帶參數的函數。 有沒有一種方法可以改進它以接受多個參數?

這是我的代碼:

// Necessary includes:
#include <vector>
#include <any>

// If the data is a function:
void call_if_function(void (*function)()) {
    function();
}

// If the data is not a function:
void call_if_function(std::any variable) {
    (void)variable;
}

template <class T>
class Queue {
    // Public members:
    public:
        // Enqueue data:
        void Enqueue(const T& data) {
            vec_.push_back(data);
        }

        // Dequeue data:
        void Dequeue() {
            T holder = vec_.front();

            vec_.erase(vec_.begin());

            call_if_function(holder);
        }

    // Private members:
    private:
        std::vector<T> vec_;
}

編輯的問題

在連續測試中,我最終嘗試使用模板。 但是我不確定如何檢查模板變量是否存在。

@VTT的評論實際上救了我。

#include <variant>

typedef std::variant<int, double> any_num;

any_num add(any_num a, any_num b)
{
    return a + b;
}

any_num call_if_function(any_num(*function)(any_num, any_num), any_num a, any_num b)
{
    return function(a, b);
}

暫無
暫無

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

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