Передача функций с несколькими параметрами в качестве параметра шаблона - PullRequest
0 голосов
/ 30 июня 2018

Оригинальный вопрос

Как я могу передать функцию с или без параметра в качестве шаблона?

Причина в том, что я обновил мою 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_;
}

Отредактированный вопрос

Во время непрерывных тестов я в конце концов попытался использовать шаблоны. Но я не уверен, как проверить, существует ли шаблонная переменная.

1 Ответ

0 голосов
/ 22 февраля 2019

@ Комментарии 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...