gpt4 book ai didi

c++ - 比较模板类型和具体类型的实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:36 25 4
gpt4 key购买 nike

我想有时在编写模板函数时,您可能还会遇到需要将模板参数类型化实例与具体类型化实例进行比较的情况,就像这样

template<class A> void foo()
{
A* something=new A(); //new A() mightnot exist
if(*something==70000)
{
cout<<"Item 42\n";
}
}

但重要的是,您当前的设计中不能遗漏模板。您将如何更改和重构您的功能?感谢您分享您在实际应用中的经验

最佳答案

在任何可能出现这种情况的情况下,只要您的 A 类为其定义了 operator==() 方法,并且它可以隐式转换为与之比较的具体类型(即不需要显式强制转换),则没有问题。否则,您最终会遇到编译器错误,这是一件好事,因为它会在编译时而非运行时指出您的错误。

例如,假设您的 A 类定义如下:

template<typename T>
class A
{
private:
T b;

public:
A(): b(0) {}
const T& value() const { return b; }

template<typename U>
bool operator==(const U& compare) { return compare.value() == b; }
};

那么只要:

  1. 比较 U 对象类型有一个名为 value() 的方法,可以调用它来获取它的内部私有(private)“值”
  2. U::value() 返回的任何类型都与您的模板T 类型相当(并且可隐式转换)

你很好。否则你会得到一个编译器错误,提示这两点之一。

关于c++ - 比较模板类型和具体类型的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812979/

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