【发布时间】:2019-02-10 00:37:35
【问题描述】:
我正在查看大型分子动力学代码的源代码,发现了一些我不明白的地方。我在名为 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
谢谢
【问题讨论】:
-
您是否曾经实例化模板类并在某处调用
testFunc()函数?请参阅here。 -
我做了并且得到了和你一样的地方。但是,我从编译中获取的原始来源使用它就可以了。查看我所做的编辑。
-
我看不到
.运算符在哪里与buf或gbuf一起使用。 -
第 595 行将 gdata 定义为指向类型 T 的指针。第 556 行访问 buffer() 函数而不取消引用 gdata。
-
gdata 是一个 T 类型的 array,而不是指针。但它不应该工作,不。应该是
g.buffer()和buffer()。
标签: c++ class templates pointers syntax