我需要导出模板化方法及其专业化。它目前在源文件中,它工作正常。 我试图将代码移动到标题。不幸的是,一旦我这样做,专业化就不再适用了。
这是目前的状况:
struct klass
{
template<typename T> method(T&);
template<typename T> method(std::vector<T>&);
};
template<typename T>
void klass::method(T& value)
{
}
template<typename T>
void klass::method(std::vector<T>& value)
{
}
template<>
void klass::method<std::string>(std::string& value)
{
}
我认为这应该是有效的方式。
如果我没弄错的话,我应该能够将所有模板和部分特化直接导出到标题。
非部分特化不能在标题中,并且需要保留在源文件中。但它并不重要,因为它实例化后,每次使用klass :: method都应该已经使用了特化。
当然,这不会发生:如果我在标题中移动模板和部分特化,则完全忽略保留在源文件中的非局部特化。
请您解释一下如何做到这一点?我是否需要在标题内移动专门化以及如何?
我正在使用gcc。如果我对msvc的兼容性有任何了解,我也很感兴趣。