我一直在寻找大量的《分子动力学》代码的源代码,发现我不了解的内容。我在名为test.cpp的文件中创建了一个简单的测试用例(如下所示):
template <class T> class Test {
public:
void testFunc() {
T *ptr1;
ptr1 = ptr1.function();
}
}
如果您按以下方式调用编译器,则可以使用GNU的g ++和Intel的icpc进行编译:
$CXX -o test.o -c test.cpp
我不明白为什么这是有效的c ++语法。要访问从来没有定义过的function()
,我必须取消引用ptr1
或使用->
运算符。
编译器对这种情况的理解与我不同吗?
如果要查看我在哪里找到的原始源,请签出此文件的第556行和595行: https://www.ks.uiuc.edu/Research/namd/doxygen/MsmMap_8h-source.html
谢谢
答案 0 :(得分:0)
答案是它不是有效的C ++语法。
请记住,Test不是一个类,它是一个类的 template 。根据您的要求,这是向编译器的指示,说明如何为特定类型T 构造Test类。
您没有要求它。
尝试添加类似内容
Test< int > *test = new Test< int >();
test->testFunc();
您应该收到类似
的错误error: request for member 'function' in 'ptr1', which is of non-class type 'int*'