以类为参数调用模板类的静态模板方法
Posted
技术标签:
【中文标题】以类为参数调用模板类的静态模板方法【英文标题】: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<Projection>
有问题吗?还没有完全定义?
这个世界的其他地方在技术上是在一个源文件中,在底部进行了一些显式的实例化,但我把这些都放在一个文件中,但错误相同。感谢您提供任何见解,请不要在非标题模板上羞辱我。这不是我的选择。
【问题讨论】:
这样的 API 对我来说似乎是倒退的,至少在名称的选择上是这样。您不能“分配”通过引用传递的对象,它必须已经存在,即已分配。 是的,我缩短了名称并删除了大部分定义。它是一个封装结构,包含指向主机/设备数据的指针 这很好,除了已经回答的::template
细节。也许真正的来源有充分的理由,但不清楚为什么你在 static
函数中采用相同类型的参数而不是使用隐式参数:template <bool devPtr> void allocate();
哦,我明白你们俩的意思了。我不认为我有这样做的理由。我认为它变成了这样,因为它最初是从C
翻译的,所以你的标准make_struct
类型的东西可能刚刚被扔进了课堂。不过我完全同意,我必须改变它(现在我实际上能够编译它xD)
【参考方案1】:
对于像这里的答案这样的静态方法,是否有某种类似的 .template 魔法?
是的。
template <class Projection>
void some_method(FrameData<Projection> &m_data)
FrameData<Projection>::template allocate<true>(m_data);
【讨论】:
AhHhHHHhhhh 哇,我不敢相信我从未尝试过。谢谢,一过 12 分钟窗口就会接受。以上是关于以类为参数调用模板类的静态模板方法的主要内容,如果未能解决你的问题,请参考以下文章