gpt4 book ai didi

c++ - 类模板,具有模板功能,特化

转载 作者:行者123 更新时间:2023-11-28 03:34:38 24 4
gpt4 key购买 nike

我正在尝试编写一个模板类来帮助程序员编写正确的代码。给定从旧金山到华盛顿的路线和从华盛顿到纽约的路线,它将计算从旧金山经华盛顿到纽约的路线。当给定从旧金山到洛杉矶和华盛顿到纽约的路线时,编译器将报错。

这是类(没有正常的主力函数):

extern const char miami[] = "Miami";

template< const char* FINISH, const char* START>
class Route {
public:
Route();
~Route() {};

template<const char* OTHERPLACE>
Route<START, OTHERPLACE> alterFinish() const;
};

template<const char* START> // specialisation
template<const char* OTHERPLACE>
// Allow only miami as FINISH to be changed to something else.
Route<START, OTHERPLACE> Route<START, miami>::alterFinish() const{
return Route<START, OTHERPLACE>();
}

不幸的是,这不起作用。我收到“不完整类型的无效使用”错误。没有专门化的同类功能确实可以编译。我做错了什么?

最佳答案

invalid use of incomplete type表示您使用了尚未声明的内容。在本例中,它是 Route 的偏特化:

template <const char* START>
class Route<START,miami>{

template<const char* OTHERPLACE>
Route<START, OTHERPLACE> alterFinish() const;
};

为什么需要这个?嗯,你想创建一个方法 alterFinish() ,它应该专门用于 template<class START> Route<START, miami> .全名是Route<START, miami>::alterFinish() .但是您从未定义过 template<class START> Route<START, miami>任何地方。它是一个不完整的类型,因此编译器无法编译。

但是,我认为您的程序中还有其他一些错误。您真的有必要使用模板吗?不会像 std::map<std::pair<city,city>, double> 这样的东西足够你的成本?你真的想将你的城市保存为字符串文字吗?

此外,您的程序在您的特殊情况下崩溃的原因也不清楚。根本没有足够的代码,即使您提供的代码也不会提供编译器错误,除非添加必要的调整并移动许多符号。

关于c++ - 类模板,具有模板功能,特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370227/

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