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

时间:2016-03-04 04:40:03

标签: 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()。为什么我的第一个代码块没有出现同样的错误?

1 个答案:

答案 0 :(得分:2)

使用g ++和clang ++,使用指针传递值并通过引用传递失败 clang ++是版本3.6.1 g ++是版本4.9.2

如果您可以在visual studio上重现这一点,请在其编译器上提交错误。