Я искал источник для большого кода молекулярной динамики и нашел то, что я не понимаю. Я создал простой тестовый пример в файле с именем 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
Спасибо