C++ -- 我可以使用没有在头文件中实现的模板函数吗?

cro*_*alk 5 c++ templates

可能的重复:
将 C++ 模板函数定义存储在 .CPP 文件中
为什么模板只能在头文件中实现?
为什么模板类的实现和声明要在同一个头文件中?

我有三个文件。在 base.h 中,我有一个类,它有一个使用模板的成员:

class Base {
    protected:
        template <class T>
            void doStuff(T a, int b);
};
Run Code Online (Sandbox Code Playgroud)

在 base.cpp 中,我实现了 Base::doStuff():

#include "base.h"

template <class T>
void Base::doStuff(T a, int b) {
    a = b;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试在我的项目的另一个类中使用它:

#include "base.h"

void Derived::doOtherStuff() {
    int c;
    doStuff(3, c);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到一个链接错误,指出它找不到“doStuff(int, int)”

从我所看到的,如果不将此函数的实现移动到头文件中,这在 C++03 中是不可能的。有没有干净的方法来做到这一点?(我可以使用 C++11x 功能)。

yur*_*hek 4

.inl将模板定义与内联函数定义一起放入文件中,并将其包含在.h文件末尾是一种常见的习惯用法:

基础.h

#ifndef BASE_H
#define BASE_H

class Base {
    protected:
        template <typename T>
        void doStuff(T a, int b);
};

#include "base.inl"

#endif
Run Code Online (Sandbox Code Playgroud)

基本文件

template <typename T>
void Base::doStuff(T a, int b) {
    a = b;
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2276 次

最近记录:

12 年,7 月 前