C++ 限制泛型中的类型(和指针问题)

标签 c++ pointers generics

这个问题可能更多地与 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/

相关文章:

c++ - 什么时候在堆中的对象上调用 C++ 析构函数?

c - 当 ram 地址存储为 u32 时从 ram 内存中获取值

java - 具有继承和泛型的流畅 API

c++ - 为什么 C++ 中 char 不被视为数字?

c++ - Linux终端: carriage return stuck at line wrap

c++ - 使用 MinGW-w64 为 Windows 编译 LAPACK

c - 通过指针打印文本

c++ - 对象数组作为链表中的字符数组——我关于对齐的假设是否有效?

java - Generic <T extends Comparable<T>, V extends T> is V required

java - 我是否必须将 java 中已经通用的数组转换为通用类型