重载模板化函数时,如果编译器可以选择以下任一选项,则编译器应如何选择要调用的版本:
func<T>(foo))。考虑以下C ++代码:
#include <stdio.h>
struct Parent {};
struct Child : public Parent {};
template <typename T>
void func(T) {
printf("func(T)\n");
}
void func(Parent) {
printf("func(Parent)\n");
}
int main() {
func(1);
func(Parent());
func(Child());
}
Run Code Online (Sandbox Code Playgroud)
用gcc或clang编译,输出:
func(T)
func(Parent)
func(T)
Run Code Online (Sandbox Code Playgroud)
前两行是预期的并且有意义。但是,在call中func(Child()),它可以像调用一样容易func(Parent)(这似乎(如果有的话)应该执行的操作)。
因此,我有两个主要问题:
func(Parent)在传递a时调用Child?我可以在自己的代码中解决此要求,并且此示例是我尝试做的简化版本,但我认为这是相同的问题。