【问题标题】:call static template method of template class with class as parameter以类为参数调用模板类的静态模板方法
【发布时间】:2017-06-11 10:52:55
【问题描述】:

static 具有 (i) 模板和 (ii) 类本身作为参数的模板类的方法没有任何问题,是吗?考虑类

template<class Projection>
struct FrameData {
    // ...
    template <bool devPtr>
    static void allocate(FrameData<Projection> &data) {
        // ... do allocations ...
    }

}

这是在文件A 的标题中声明的。在世界其他地方,我有类似的东西

template <class Projection>
void some_method(FrameData<Projection> &m_data) {
    FrameData<Projection>::allocate<true>(m_data);
}

我终于有了一些

error: reference to overloaded function could not be resolved; did you mean to call it?
  • 对于static 方法like the answer here 是否有某种类似的.template 魔法?
  • 参数FrameData&lt;Projection&gt;有问题吗?还没有完全定义?

这个世界的其他地方在技术上是在一个源文件中,在底部进行了一些显式的实例化,但我把这些都放在一个文件中,但错误相同。感谢您提供任何见解,请不要在非标题模板上羞辱我。这不是我的选择。

【问题讨论】:

  • 这样的 API 对我来说似乎是倒退的,至少在名称的选择上是这样。您不能“分配”通过引用传递的对象,它必须已经存在,即已分配。
  • 是的,我缩短了名称并删除了大部分定义。它是一个封装结构,包含指向主机/设备数据的指针
  • 这很好,除了已经回答的::template 细节。也许真正的来源有充分的理由,但不清楚为什么你在 static 函数中采用相同类型的参数而不是使用隐式参数:template &lt;bool devPtr&gt; void allocate();
  • 哦,我明白你们俩的意思了。我不认为我有这样做的理由。我认为它变成了这样,因为它最初是从C 翻译的,所以你的标准make_struct 类型的东西可能刚刚被扔进了课堂。不过我完全同意,我必须改变它(现在我实际上能够编译它xD)

标签: c++ class c++11 templates


【解决方案1】:

对于像这里的答案这样的静态方法,是否有某种类似的 .template 魔法?

是的。

template <class Projection>
void some_method(FrameData<Projection> &m_data) {
    FrameData<Projection>::template allocate<true>(m_data);
}

【讨论】:

  • AhHhHHHhhhh 哇,我不敢相信我从未尝试过。谢谢,一过 12 分钟窗口就会接受。
猜你喜欢
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多