【发布时间】: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)