相关疑难解决方法(0)

使用(模拟)模板头文件时的“多重定义”

我知道 C++ 模板函数的定义必须放在头文件中。然而,出于提高我正在制作的(可能)大型库的可读性和结构的原因,我将声明与实现分开,放入“模拟”标头(其中#include实现文件,非常类似于这种文件结构)。请注意,我是否知道模板化函数的实现必须在编译时包含在内,并且我正在这样做。

\n\n

简而言之,当我将非模板化函数声明添加到实现文件中时,出现“多重定义”错误。下面是带有示例的长解释。

\n\n

当“模拟”头文件+实现文件对仅包含模板化函数的声明/实现对时,一切正常。当我仅在实现文件中添加新模板化函数的实现时,它也可以正常工作。

\n\n

工作示例(当我想使用此功能时我会这样做)#include "algo.h"main.cpp

\n\n

“模拟”头文件 algo.h

\n\n
#ifndef ALGO_H\n#define ALGO_H\n\nnamespace fl{\n    template <typename Compare>\n    void algo(.. non-templated args .., Compare order = std::less<int>());\n}\n\n#include "tpp/algo.cpp"\n\n#endif // ALGO_H\n
Run Code Online (Sandbox Code Playgroud)\n\n

实现文件 tpp/algo.cpp : (目前只是algo.tpp )
\n注意:使用该tpp/.cpp文件是在初始版本中,现在我使用每个@\xcf\x80\xce\xac\xce\xbd\xcf 的.tpp文件\x84\xce\xb1 \xe1\xbf\xa5\xce\xb5\xe1\xbf\x96 \的建议,解释在最后。

\n\n
#ifndef TPP_ALGO\n#define TPP_ALGO\n\n#include "../algo.h"\n\nnamespace fl{\n\n    template <typename Compare>\n …
Run Code Online (Sandbox Code Playgroud)

c++ templates codeblocks header-files

3
推荐指数
1
解决办法
2916
查看次数

标签 统计

c++ ×1

codeblocks ×1

header-files ×1

templates ×1