当前位置: 首页 > 知识库问答 >
问题:

在变量模板中使用std::占位符

岑鸣
2023-03-14

我有困难使用std::占位符在我的函数,采取可变模板。我开始认为我不需要使用可变模板,但我已经尝试了这么久,我在杂草中思考,需要一个有新面貌的人。

下面的模板函数接受一个常规模板参数,然后接受一个可变参数。它导致编译器错误:

registerEvent<UpdaterComponent, std::_Ph<1>>(EVT_INIT, &UpdaterComponent::initialise, std::placeholders::_1); 

编译器错误:

错误1错误C2664:“状态组件::registerEvent”

这里到底出了什么问题?我如何修复这个编译器错误?

// In class Component
template<typename T, typename... Params>
Status registerEvent(int evtId, Status T::*func(const EventArgs& evtArgs), Params...)
{
    ... irrelevant code removed for brevity

    auto res = std::bind(func, this, Params...);

    ... irrelevant code removed for brevity
}


// Usage
class UpdaterComponent : public Component
{
public:
    UpdaterComponent()
    {
        registerEvent<UpdaterComponent, std::_Ph<1>>(EVT_INIT, &UpdaterComponent::initialise, std::placeholders::_1);
    }
};

共有1个答案

柴兴贤
2023-03-14

主要问题是缺少括号:

template<typename T, typename... Params>
Status registerEvent(int evtId, Status (T::*func)(const EventArgs& evtArgs), Params...)
                                      ^^^       ^^^

因此,最终得到的func类型是错误的。

一旦解决了这个问题,为什么要显式地提供所有模板参数?这就是模板演绎的目的!当你发现自己在键入std::Ph时,不要这样做。这就足够了:

registerEvent(EVT_INIT, &UpdaterComponent::initialise, std::placeholders::_1);
 类似资料:
  • 根据xslt中的变量应用模板的最佳方法是什么?变量将通过java脚本代码更改。我已经阅读了xslt v 2.0中的函数,但答案解释得不是很好,也不符合我的要求 我尝试了下一个: 我创建了一个全局变量 然后像这样应用 然后像这样匹配 但没有显示任何内容。

  • template module在Ansible中非常常用,而它在使用的时候又没有显示的指定template文件中的值,所以有时候用户会对template文件中使用的变量感到困惑,所以在这里又重新强调下。 template变量的定义 在playbook中定义的变量,可以直接在template中使用,同时facts变量也可以直接在template中使用,当然也包含在inventory里面定义的host

  • 问题内容: 这是一个相当基本的问题(我是Django的新手),但是在模板的视图中使用变量集时遇到了麻烦。如果我在视图内初始化字符串或列表(即h =“ hello”),然后尝试在模板内调用它: 既没有输出也没有错误。同样,如果我尝试在模板中使用不存在的变量: 再次没有错误报告。这正常吗?以及如何在模板中使用变量。谢谢! 问题答案: 为了能够访问模板中的变量,它必须位于用于渲染该模板的上下文中。我的猜

  • 问题内容: 我在Django模板中使用static模板标签: 但是,我需要使用的是文件名,该文件名是模型对象的属性(即,我将其作为上下文传递到此模板。但是,如何在静态模板标记中包含该文件名呢?这会引发错误)。 有办法吗? 问题答案: 您可以在静态模板标记中使用use变量。请注意,您不需要或

  • 本文向大家介绍在模板中使用{$smarty}保留变量?相关面试题,主要包含被问及在模板中使用{$smarty}保留变量?时的应答技巧和注意事项,需要的朋友参考一下 {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.get.page}̲ //类似在php脚本中访问_GET[page] {KaTeX parse err

  • 上一节中,我们简单介绍了模板相关的概念,并手动实践了 python 中的两个流行的模板库 Mako 和 Jinja2。接下来,我们将深入了解如何在 Django 中使用模板系统。 1. Django 中的模板系统 Django 中自带了一个模板系统,叫做 Django Template Language (DTL),通过该引擎,我们可以方便的加载模板文件到内存中进行编译并动态插入数据,最后返回转换