相关疑难解决方法(0)

C++类模板的显式实例化是否实例化依赖基类?

我认为一个显式的实例化请求也会自动实例化所有基类成员,但我linker error: unresolved external symbol "public: void Base<int>::foo(int)"在使用Visual Studio 2008或2010构建此代码时得到了一个.

请注意,向foo()内部添加调用会bar()强制编译器实例化Base<int>::bar()并且构建成功,因此编译器似乎具有实例化所需的所有信息foo().

显然,Base<int>在source.cpp中显式实例化允许构建成功,但是在显式实例化派生类时,需要显式实例化任何依赖基类似乎很愚蠢.

这是正常的吗?我无法找到关于这个问题的标准.

header.h

template<typename T>
class Base {
public:
    void foo();
};

template<typename T>
class Derived : public Base<T> {
public:
    void bar();
};
Run Code Online (Sandbox Code Playgroud)

source.cpp

#include "header.h"

template<typename T>
void Base<T>::foo() { }

template<typename T>
void Derived<T>::bar() {
    // this->foo();   // adding this forces instantiation of foo()???
}

template class Derived<int>;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "header.h"

int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ templates

12
推荐指数
1
解决办法
4028
查看次数

标签 统计

c++ ×1

templates ×1