这个问题可能更多地与 C++ 在编译时如何处理指针有关,但这是在学习泛型时出现的。我有以下代码(在 Visual Studio 中没有出现任何错误):
class myClass { int x; };
template<typename T>
int myFunc(T obj)
{
return obj.someMethod();
}
int main(int argc, char *argv[])
{
myClass obj = myClass();
myFunc(obj);
}
显然,“myClass”没有 someMethod(),但 Visual Studio 没有给我任何错误。但是,当我将 myFunc 更改为:
template<typename T>
int myFunc(T *obj)
{
return obj->someMethod();
}
我确实遇到了错误,我认为这是因为编译器检查 myClass 没有 someMethod()。为什么第一段代码没有出现同样的错误?
最佳答案
对于我来说,g++ 和 clang++ 使用指针传递值和引用传递都失败了 clang++ 是版本 3.6.1 g++ 是 4.9.2 版本
如果您可以在 visual studio 上重现它,请在他们的编译器上提交错误。
关于C++ 限制泛型中的类型(和指针问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35788098/