【发布时间】:2019-06-10 11:13:37
【问题描述】:
模板函数能否根据指针类型重载如下:
1)
template <class T>
void Function(T* ptr, char m)
{
...
}
2)
template <class T>
void Function(T i, char m)
{
...
}
它在 C++ 中有效吗?
第 2 部分: 我可以根据下面的指针类型专门化(模板专门化)函数(忽略这种情况下的上述重载)吗?
3)
template<>
inline Function<string>(string sptr, char m)
{
...
}
PS:当我尝试用 3 专门化模板 1 时,我得到编译错误。
【问题讨论】:
-
你试过了吗?
-
我试过了,它编译得很好,但不确定这样的事情是否合法有效,因为有很多情况在一个编译器上工作正常,在另一个编译器上不起作用,并且属于未定义的类别。
-
您可以完全合法地同时拥有
void f(int)和void f(int*)。这两个重载是来自模板还是直接定义都没有关系... -
@Inline 问题是编译器撒谎的例子太多了。通常是由于编译器扩展(例如,在 C++ 中接受 VLA),有时甚至是由于错误。所以,虽然先咨询编译器是个好主意,但如果你对标准有一些参考,你只能是 100%...
-
啊,我想我在你看到了一个问题:其实你可以推导出e。 G。
void function(int*, char)来自两个模板。那么该选哪一个呢?规则很简单:总是更具体的...哪一个是更具体的?嗯,第一个需要指针,而第二个可以接受anything,因此第一个更具体。有点草率的措辞,我知道,但我认为你仍然明白这一点......
标签: c++ templates overloading