这个问题可能不清楚,所以让我用一个例子来解释一下。我有一个模板类 PairContainer<T1, T2>
具有公共(public)功能:
//somewhere in PairContainer class definition
void foo(PairContainer& pc)
{
//do something
}
现在我想做一个函数bar
可以这样调用:
//somewhere in main...
PairContainer<int, int> pc1;
PairContainer<some_class, some_other_class> pc2;
bar(pc1, pc2); //is equivalent to pc1.foo(pc2)
我该怎么做?我做不到:
void bar(PairContainer& pc1, PairContainer& pc2)
{
pc1.foo(pc2);
}
因为这不会编译(“缺少模板参数”)。
最佳答案
PairContainer
不是一种类型。它是一个模板。这意味着,它不能用在需要类型的地方,特别是在函数定义中。您可以创建一个功能栏,它接受 PairContainer 模板的特定实例,如下所示:
void bar(PairContainer<int, int>, PairContainer<some_class, some_other_class>)
但我怀疑这是你想要的。
制作bar
的唯一方法接受任何类型的 PairContainer
是通过使它成为一个模板。
顺便说一句,为什么你可以有一个像void foo(PairContainer& pc)
这样的结构?在你的类定义里面是因为 PairContainer
是简写形式,表示 PairContainer<T1, T2>
关于c++ - 如何制作适用于模板类的非模板全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614225/