很长一段时间以来,我一直在努力解决将模板化函数的实现与定义分开的老问题。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
。我想稍后使用目标文件。
那么它看起来如何固定呢?