c++ - 使用可变参数、函数参数和非参数模板参数调用模板成员函数
问题描述
我正在尝试使用定义为的模板成员函数:
template <class HeaderClass, typename ...Args>
void LoaderClass::loadHeader(std::function<HeaderClass(Args&&...)> headerGenerator, Args&&... argsForGenerator) {
// stuff
auto hdrPtr = new HeaderClass(headerGenerator(std::forward<Args>(argsForGenerator)...));
/// more stuff
}
本质上,我想调用这个函数,它可以从一组变量参数中获取创建各种类(基础类的所有子类,fwiw)的实例的函数。
指定的函数在 GCC 9.x 上编译得很好,但我不知道调用它的正确方法。我在搜索时发现了许多类似的示例,但没有一个涉及 HeaderClass 模板参数未直接在函数签名中使用的情况。无论如何,从那些类似的例子中,我尝试过:
SpecialHeader headerMaker(int arg1, std::string arg2, float arg3) {
// create and return a SpecialHeader instance
}
loader.loadHeader(&headerMaker, 1, "whatever", 3.5); // Doesn't work, with or without &
loader.loadHeader<SpecialHeader>(&headerMaker, 1, "whatever", 3.5); // Doesn't work
loader.template loadHeader<SpecialHeader>(&headerMaker, 1, "whatever", 3.5); // Doesn't work
在每种情况下,我都会收到一些candidate template ignored: could not match 'function<SpecialHeader (type-parameter-0-1 &&...)>' against 'SpecialHeader (*)(int, string, float)'
.
所以我的问题是,我究竟如何对我的函数进行有效调用?我当然不可能创造出不可调用的东西,不是吗?
解决方案
推荐阅读
- python - 用于实现分支定界技术以解决非凸非线性整数多目标优化问题的 Python 包?
- python - 如何区分不同服务器的 discord.py 余额?
- javascript - 如何按属性对数组对象进行分组?
- python - 用 30 秒的断点和颜色绘制时间序列数据
- r - 将变量分配给绘图标题中的 R 表达式
- java - SimpleDateFormat 中月份的奇怪问题
- c - 比较 char* 行中的第一个字符?
- javascript - 如何覆盖 Angular 库 scss 变量?
- r - 使用 bin 标签 ggplot 创建彩虹直方图
- docker - 使用 docker 运行 gitlab-ci 时缓存 maven 依赖项