面试题:C++函数重载与类型匹配的模板及歧义处理
分析以下C++代码,解释代码中可能出现的函数重载歧义问题,并说明如何修改代码以避免歧义:
```cpp
template<typename T>
void func(T t) {
std::cout << "Template version for general type" << std::endl;
}
template<>
void func<int>(int t) {
std::cout << "Specialized template version for int" << std::endl;
}
void func(double d) {
std::cout << "Non - template version for double" << std::endl;
}
int main() {
func(10);
func(3.14);
// 假设这里定义了一个自定义类型MyType,如何编写func函数的重载版本,使其能正确匹配MyType类型,且不会与现有重载产生歧义
// 在此处添加关于MyType及func函数重载的代码
return 0;
}
```请完成代码中注释部分,并详细阐述避免歧义的原理。