template <typename T>
void func(){
T* t = new T();
t->do_something();
...
}
在这种情况下,编译器如何知道typename T会在其上定义一个方法do_something()
?在Java中,我们可以指定泛型类扩展的接口,但C++显然不具有相同的语法。那么如果我们拨打func<AClassThatDoesntHaveDoSomethingDefined>()
会发生什么?C++如何知道模板类在编译时支持哪些方法?
可能的重复:http://stackoverflow.com/q/122316/365102,http://stackoverflow.com/a/15671344/365102 –
@MateenUlhaq号我不问如何在模板上添加约束。我更好奇为什么C++允许这样的代码编译,以及在未定义被调用的函数时如何处理这种情况。 – OneZero
@OneZero语言的规则是,除非实例化模板,否则很少进行检查。然而,一旦模板被实例化 - 有足够的信息知道存在问题,不是? –