gpt4 book ai didi

C++ 模板特化链接器错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:53 32 4
gpt4 key购买 nike

当我有模板特化时,如何将头文件与 cpp 文件分开?

我看过一些关于如何通过在头文件末尾包含 cpp 文件来将头文件与模板实现分开的帖子。但是当我必须进行模板特化时,这种策略就不起作用了。

这是我的头文件

#ifndef H_SUM_H
#define H_SUM_H

#include <map>
#include <string>

template <typename T>
double Sum(const T &source);

template <>
double Sum(const std::map<std::string, double> &source);

#ifndef CPP_SUM_CPP
#include "Sum.cpp"
#endif

#endif

这是我的实现文件

#ifndef CPP_SUM_CPP
#define CPP_SUM_CPP
#include "Sum.h"

template <typename T>
double Sum(const T &source){//code//}

template <>
double Sum(const std::map<std::string, double> &source){//code//}

#endif

两点:

1) 如果我删除模板特化,一切正常

2) 当我包含 cpp 文件时(对于模板特化的情况)代码

#ifndef CPP_SUM_CPP
#include "Sum.cpp"
#endif

为灰色(在 VC 2010 中)并标记为 block 代码!

有什么想法吗?

谢谢

最佳答案

你的源文件只能有template<> ,里面什么都没有 <> , 函数/方法不能部分特化。通用类型只能存在于头文件中。

关于C++ 模板特化链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32292476/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com