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

问题描述 投票:1回答:1

我正在查看大型分子动力学代码的来源,发现了一些我不理解的东西。我在一个名为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++ class templates pointers syntax
1个回答
0
投票

答案是它不是有效的C ++语法。 记住,Test不是一个类,它是一个类的模板。对于编译器,如果你要求它如何为特定类型T构建Test类,这是你的指示。你没有问过它。

尝试添加类似的东西

Test< int > *test = new Test< int >();
test->testFunc();

你应该得到一个错误

error: request for member 'function' in 'ptr1', which is of non-class type 'int*'
© www.soinside.com 2019 - 2024. All rights reserved.