gpt4 book ai didi

c++ - 内部类模板的非成员运算符重载

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:53 25 4
gpt4 key购买 nike

我更喜欢在单独的文件中编写类和函数模板的定义,该文件自动包含在“public” header 之后。但是,我遇到了一个有趣的案例,我似乎无法做到这一点。

template <typename T>
class Outer
{
public:
template <typename U>
class Inner
{
friend bool operator ==(const Inner& lhs, const Inner& rhs);
};
};

using Type = Outer<int>::Inner<short>;

int main()
{
Type a;
Type b;
a == b;
}

是否可以单独编写适用于任何 TUoperator== 的定义?

最佳答案

对于特定的特化,是的:

template <typename T>
class Outer
{
public:
template <typename U>
class Inner
{
int x = 42;
friend bool operator ==(const Inner& lhs, const Inner& rhs);
};
};

using Type = Outer<int>::Inner<short>;

bool operator ==(const Type& lhs, const Type& rhs) {
return lhs.x == rhs.x;
}

int main()
{
Type a;
Type b;
a == b;
}

在您的示例中,模板的每个特化都与一个非模板函数成为 friend ,该函数将特定特化作为参数。您可以在类里面定义这个函数(然后每次实例化模板时它都会被淘汰),或者您可以在类外定义它 - 但是您必须为您使用的每个特化定义一个。

关于c++ - 内部类模板的非成员运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919785/

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