我正在阅读一篇文章An Idiot's Guide to C++ Templates - Part 2并来到了声明和实现的分离部分。
现在我有三个文件,其内容如下:
样本.hpp
#ifndef SAMPLE_HPP
#define SAMPLE_HPP
template <typename T>
void displayValue(T tValue);
#include "sample.cpp"
#endif
样本.cpp
#include <iostream>
template <typename T>
void displayValue(T tValue){
std::cout<<tValue<<std::endl;
}
主文件
#include "sample.hpp"
int main(void) {
displayValue(20);
displayValue(3.14);
return 0;
}
据作者介绍,
您的项目/构建现在不得为编译过程添加 Sample.CPP
但是,当我使用时:
g++ main.cpp sample.cpp -o main
它仍然有效!
我认为在这种情况下,对象sample.o
仍将不包含关于模板函数的代码displayValue
,并且在main.o
对象中,它包含。所以理论上没有错误。但是作者为什么must not
说呢?