gpt4 book ai didi

c++ - 通过指针调用模板类成员函数【为什么这个有效的c++】?

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:57 25 4
gpt4 key购买 nike

我正在查看大量分子动力学代码的源代码,发现了一些我不理解的东西。我在名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com