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

标签 c++ class templates pointers syntax

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

相关文章:

c++ - 通过 std::map 进行第 n 次交互时出现段错误

c++ - boost crc 每次产生不同的输出

Java:当它具有 protected 构造函数时,如何从 java.io 为 Reader 类创建新的类对象

c++ - 什么时候可以在 constexpr 成员函数中使用非常量成员?

javascript - ng-view 未填充模板

java - 避免 Java 类型删除

c++ - 如何为类编写 "get"方法模板

C++ 字符串函数只返回某些字符

c++ - 为什么 “int”无法与 “j”一起正常工作,但是long long可以正常工作吗?

c++ - 错误 C2784,键映射中的类