看到下面的代碼,請清除我的疑惑。顯式模板實例如何影響鏈接器可以找到的內容?
由於ABC是一個模板,它爲什麼不顯示一個錯誤,當我們把TEST.CPP的ABC類的成員函數的定義是什麼?
如果我把test.cpp代碼放在test.h和remve 2中,那麼它工作正常。爲什麼?
。
// test.h
template <typename T>
class ABC {
public:
void foo(T&);
void bar(T&);
};
// test.cpp
template <typename T>
void ABC<T>::foo(T&) {} // definition
template <typename T>
void ABC<T>::bar(T&) {} // definition
template void ABC<char>::foo(char &); // 1
template class ABC<char>; // 2
// main.cpp
#include "test.h"
int main() {
ABC<char> a;
a.foo(); // valid with 1 or 2
a.bar(); // link error if only 1, valid with 2
}
你爲什麼要問?他們是兩個毫不相關的陳述。 – 2010-04-29 07:29:14
@Dennis Zickefoose:大家都是初學者在某些點 – ereOn 2010-04-29 07:33:24
@ereOn:是的,但爲什麼他問能走很長的路向建議適當的解決辦法回答他的問題時採取。 – 2010-04-29 07:57:27