かなり長い間、テンプレート化された関数の実装を定義から分離するという古いas-c++の問題に苦労しています。C ++ 0x'extern
はこれに対する解決策のようですが、私はそれを適切に適用できません
私のコード:
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
ます。後でオブジェクトファイルを使用したい。
では、どのように修正されたように見えますか?