【发布时间】:2020-10-28 12:22:05
【问题描述】:
我想保存模板参数列表并将其传递给函数。
就像std::thread 将参数传递给线程。参数类型是模板化的,参数计数不是静态的。
例如,它是如何工作的:
class CallbackList {
public:
Callback(/* Type of list of template args */ args) {
this->saved_args = args;
}
void Call() {
this->callback(saved_args);
}
private:
/* Type of list of template args */ saved_args;
CallbackType callback;
}
或者我该如何实现:
template<typename ...Args>
class CallbackList {
public:
using CallbackPrototype = /* some prototype */;
void RegisterCallback(CallbackPrototype callback, Args... args) {
CallbackInfo callback_info;
callback_info.callback = callback;
callback_info.args = { args... };
this->callbacks.push_back(callback_info);
}
void Call() {
for (CallbackInfo& callback_info : this->callbacks)
callback_info.callback(callback_info.args);
}
private:
struct CallbackInfo {
CallbackPrototype callback;
/* what type should be here? tuple? args count are not static */ args;
};
std::vector<CallbackInfo> callbacks;
}
有可能吗?
如何实现?
【问题讨论】:
-
您可以将
Callback设为类模板还是将不同的回调对象存储在单个容器中? -
您正在寻找可变参数模板。这是一个广泛的话题,我建议你看一些例子,例如:en.cppreference.com/w/cpp/language/parameter_pack
-
实际的
callback是如何设置的?它从未在这里初始化。 -
@NathanOliver,我可以将类模板化为@AndyG,这是示例,
callback字段将被初始化我还添加了第二个示例,更接近我的实际任务
标签: c++ templates callback variadic-templates