我需要导出一个模板化方法及其专业化。它当前位于源文件中,并且工作正常。我正在尝试将代码移动到标题。不幸的是,一旦我这样做了,这些专业就不再起作用了。
这是目前的情况:
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 的兼容性我应该知道的,我也很感兴趣。