所以我对函数模板的部分专业化有疑问。我选择此处描述的解决方案:问题
现在我有这个:
#include <vector>
#include <iostream>
template <typename T> struct helper {
static void print(T value) { std::cout << value; }
};
template <typename T> struct helper<std::vector<T>> {
static void print(std::vector<T> const &value) { }
};
template <typename T>
void print (T const &value) {
// Just delegate.
helper<T>::print (value);
}
int main () {
print (5);
std::vector<int> v;
print (v);
}
但我想要这样的布局:
助手.hpp
#include <vector>
#include <iostream>
template <typename T> struct helper {
static void print(T value) { std::cout << value; }
};
vector_helper.cpp
#include <vector>
#include <iostream>
template <typename T> struct helper<std::vector<T>> {
static void print(std::vector<T> const &value) { }
};
打印文件
#include "helper.hpp"
template <typename T>
void print (T const &value) {
// Just delegate.
helper<T>::print (value);
}
主文件
#include "print.hpp"
int main () {
print (5);
std::vector<int> v;
print (v);
}
编译如下:
g++ main.cpp vector_helper.cpp
问题是MinGW正在产生链接时错误:未定义的参考helper<vector<...>>::print(vector<...>)
当我添加该行时:
#include "vector_helper.cpp"
之前int main() {...}
,它编译得很好并且也可以工作。我该如何解决它,因为我想在 g++ 命令链接的文件中添加类专业化。