我正在查看大量分子动力学代码的源代码,发现了一些我不理解的东西。我在名为 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
谢谢
最佳答案
答案是它不是有效的 C++ 语法。
请记住,Test 不是一个类,它是一个类的模板。这是你对编译器的指示,告诉它如何为特定类型 T 构造一个测试类 ,如果你要求的话。
你没有要求它这样做。
尝试添加类似的东西
Test< int > *test = new Test< int >();
test->testFunc();
你应该会得到类似这样的错误
error: request for member 'function' in 'ptr1', which is of non-class type 'int*'
关于c++ - 通过指针调用模板类成员函数【为什么这个有效的c++】?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52175421/