理解奇怪的模板行为

时间:2013-02-02 18:05:49

标签: c++ templates

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

这是目前的状况:

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的兼容性有任何了解,我也很感兴趣。

0 个答案:

没有答案