【发布时间】:2014-11-07 11:08:45
【问题描述】:
我有模板类 MyClass
template <class T>
class MyClass
{
public:
MyClass() { }
private:
void PrivateFunction() {
std::cout << "Message From Private Function" << std::endl;
}
};
现在当我尝试在另一个函数编译器中使用 PrivateFunction() 时会报告错误,但是当我在模板函数中尝试相同的编译器时不会显示任何错误。
-
编译器不报错。
template <class T> void f() { MyClass<int> a; a.PrivateFunction(); } -
编译器报错。
void f() { MyClass<int> a; a.PrivateFunction(); }
【问题讨论】:
-
你调用模板函数
f()了吗? -
是的,只有在这种情况下我才会收到错误,但我很感兴趣为什么在调用函数之前看不到错误。
-
是否出现错误取决于编译器。即使
f从未实例化,clang 也会显示 1 和 2 的错误。 -
无法为1中的模板
f()生成有效的实例化,因此模板格式错误,无需诊断。编译器在模板定义时还是在实例化时诊断错误是实现质量问题。 -
这是一个很酷的视频系列,STL 先生讲述了这些(以及许多其他)事情是如何工作的:Core C++。如果您正在开始您的language-lawyer 职业生涯,那么值得一看!
标签: c++ function class templates