【发布时间】:2015-04-01 07:55:00
【问题描述】:
我有一个模板类(顺便说一句,我使用模板类,因为它可以带来巨大的性能提升):
template<int n>
class A;
我的第一个问题是我想制作它的矢量。有人建议使用boost::any,现在我只使用void*。
A<1> a0;
A<2> a1;
vector<void*> v;
v.push_back(&a0);
v.push_back(&a1);
当我想调用这个向量的元素的一些成员函数时,问题就来了:
for(auto a : v)
(A*)a->foo();
当然,这不起作用,因为我在转换过程中没有提供模板参数.... 但是,我没有找到任何好的方法来实现这一点。
你有什么想法吗?
【问题讨论】:
-
请贴一些真实的代码。
A<1> a0();是一个函数声明。 -
这是真实的代码。
A<1> a0();调用构造函数。删除您的反对票。 -
没有。这是一个函数声明。请参阅最令人头疼的解析。
-
A<1> a0;或A<1> a0{};调用构造函数,A<1> a0();是函数声明。 -
好吧,你是对的。但是,堆栈溢出什么时候变得如此卑鄙了?根据维基百科,这是一个非常微妙的错误。我刚刚发布了我的实际代码的简化版本,其中包含构造函数参数。