首页 > 解决方案 > 如何在源文件中定义模板函数

问题描述

如何在头文件中声明模板函数并在源文件中定义?

// foo.h
template<typename T>
bool foo();

// foo.cpp
template<typename T>
bool foo()
{
    return false;
}

// main.cpp
bool bar = foo<int>();

到目前为止我已经得到了这个。它可以编译,但在链接器处失败:“未定义对 `bool foo<int>()` 的引用”

标签: c++templates

解决方案


你不能。但是如果你真的想要单独的文件,有一个解决方法:

文件.tpp

template<typename T> void foo()
{

}

Foo.hpp

#ifndef FOO_HPP_
#define FOO_HPP_

template<typename T>
void foo();

#include "Foo.tpp";

#endif

主文件

#include "Foo.hpp"

int main()
{
    foo<int>();
}

基本上,您将实现放在编译器无法识别的单独文件中,并将其包含在标题的末尾。


推荐阅读