传递具有多个参数的函数作为模板参数

时间:2018-06-30 19:01:04

标签: c++ function templates parameters

原始问题

如何通过带有 不带参数的函数作为模板?

原因是我已经更新了 Queue数据结构,正如我在另一个有关如何determine whether a function parameter is a function的问题中所告诉的那样。

现在,唯一的问题是它仅接受不带参数的函数。有什么方法可以改善它以接受多个参数吗?

这是我的代码:

// 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 :(得分:0)

@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);
}