0

我需要导出一个模板化方法及其专业化。它当前位于源文件中,并且工作正常。我正在尝试将代码移动到标题。不幸的是,一旦我这样做了,这些专业就不再起作用了。

这是目前的情况:

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 的兼容性我应该知道的,我也很感兴趣。

4

0 回答 0