c++ - 混合函数模板和普通函数

标签 c++ templates

我在头文件中声明了几个小的辅助函数。它看起来像这样:

//contents of foo.h
#ifndef FOO_H
#define FOO_H

void foo1(int a);
template <class mType>
void foo2( mType b);

#endif

//contents of foo.cpp
#include foo.h

void foo1(int a)
{
  ...
}

template <class mType>
void foo2( mType a)
{
  ...
}

通常当只有函数模板时我会添加一个#include "foo.cpp" 在 foo.h 的末尾使模板函数的实现在编译时对编译器可见。然而,当混合函数模板和普通函数时,这种方法似乎不起作用。在这种情况下,如何解决具有模板函数和普通函数的问题?

最佳答案

您永远不应该包含 cpp 文件。

将模板的实现放在头文件中。如果您想将其分开,请制作 2 个头文件。

//contents of foo.h

void foo1(int a);

template <class mType>
void foo2( mType a)
{
...
}

//contents of foo.cpp
#include foo.h

void foo1(int a)
{
...
}

(或者,还有 export 关键字,虽然没有主要的编译器支持它,它已在 C++11 中删除,换句话说,不要使用它)

关于c++ - 混合函数模板和普通函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8003307/

相关文章:

c++ - (C++) 用于检查对象是否在 vector/数组/列表/...中的模板?

c++ - 通过软阈值 (C++) 使用 2d Haar 小波变换进行图像去噪

C++ 动态库编译/链接

c++ - 不同翻译单元中字符串字面量的内存地址是否相同?

c++ - 模板化 lambda 中的所有 lambda 是否也是模板化 lambda?

c++ - 从 C++ 中的模板参数继承时无法访问基类的枚举

C++ wininet 以 513 字节 block 获取数据

c++ - 如何使用小于 8 GB 的内存编译带有模板的余弦表?

c++ - 比较两组类型是否相等

C++使用模板为结构定义别名