相當長的一段時間,我用老的-C++分離自定義模板化功能的實現的問題作鬥爭。 C++ 0x」爲extern
似乎是一個解決方案,但我不能將其應用正確的extern模板的構造函數在C++
我的代碼:
main.cpp
#include <iostream>
#include <string>
#include "lexer.h"
int main(int argc, char const *argv[]) {
std::string foo("foo");
new lexer((foo.begin()),(foo.end()));
return 0;
}
lexer.h
#ifndef lexer_h
#define lexer_h
class lexer {
public:
extern template<class InputIterator>
lexer(InputIterator i, InputIterator end);
};
#endif //lexer_h
lexer.cpp
#include "lexer.h"
template<class InputIterator >
lexer::lexer(InputIterator i, InputIterator end) {
//make it work
};
與g++ main.cpp lexer.cpp -std=c++0x
編譯。我想稍後使用對象文件。
因此,如何將它看起來固定的嗎?
我不認爲模板的extern可以解決您所問的問題。 – 2013-02-21 16:27:36
@DavidHope因此'似乎',因爲我不知道太 – Valerij 2013-02-21 16:33:09
好吧,所以根據這個鏈接http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=549,extern模板專門用於消除模板化對象的潛在代價昂貴的多重實例化(就像.h文件中的'extern'語句只是告訴代碼該變量是在其他地方定義的),這不是修復在.cpp文件中實現模板函數的方法。實現必須仍然在.h文件中(因爲它必須被編譯爲每個實例對該類都是唯一的) – 2013-02-21 16:36:40