[英]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.