定义从模板类派生的类是不够的

时间:2015-05-26 15:30:07

标签: c++ templates visual-studio-2013

" A.H"

template<class T>
struct A 
{
    void foo();
};

template<class T>
struct B : A<T> {};

&#34; A.cpp&#34;

template<class T>
void A<T>::foo()
{
}

template struct B<int>;

当我在其他源文件中调用B的方法foo时,由于未解析的外部符号,它不会构建。为什么不用B定义A?我发现至少很奇怪。有没有办法强制定义B的定义?我尝试使用A :: foo添加&#34;&#34;结构B,但它没有改变任何东西。

我知道我可以简单地定义A,但我不想这样做,因为在我的真实代码中&#34; A&#34;包含的模板参数多于&#34; B&#34;而且我很担心,除非有人编写需要那些未解决方法的代码,否则我将犯错误。此外,我非常好奇为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

在.h文件中定义A :: foo。

A.H

template<class T>
struct A 
{
    void foo();
};

template<class T>
struct B : A<T> {};

template<class T>
void A<T>::foo()
{
}

A.cpp

template struct B<int>;