gpt4 book ai didi

c++ - 对多个类重复使用运算符<<

转载 作者:行者123 更新时间:2023-12-01 19:55:16 25 4
gpt4 key购买 nike

我有两个类(这是从我的实际更复杂的案例中摘录的)

class ClUInt {
public:
ClUInt() : _i(2), _arr{1,2,3} {};
ClUInt(const unsigned int ui) : _i(ui) {};
private:
unsigned int _i;
double _arr[3];
};

class ClInt {
public:
ClInt() : _i(-2), _arr{-1,-2,-3} {};
ClInt(const int i) : ClInt() { _i = i; };
private:
int _i;
double _arr[3];
};

它们非常相似,但其中一个使用 int另一个unsigned int成员(member)_i .

我想重载operator<<例如,

std::ostream& operator<<(std::ostream& os, const ClInt & ci)
{
cout << ci._i << endl;
cout << ci._arr[0] << endl;
return os;
}

假设我想要两个类有“相同”的重载。

如何只写一次,这样更容易维护?我想过定义自己的 Actor 阵容,但我不确定这是正确的方法......

注释:

  1. 认为我没有机会让这两个类共享继承树的任何部分。

  2. 它们实际上可能是struct s,所以如果隐私影响答案,可以假设 _i_arrpublic .

  3. 实际案例中,两个struct s 有大量的“公共(public)”成员,分别是签名/未签名的。

最佳答案

使用带有概念的模板:

#include <concepts>
#include <iostream>

template<typename T>
concept ClInteger = std::same_as<T, ClInt> || std::same_as<T, ClUInt>;

template <ClInteger T>
std::ostream& operator<<(std::ostream& os, const T & ci)
{
std::cout << ci._i << '\n';
std::cout << ci._arr[0] << '\n';
return os;
}

请注意,此运算符必须是这些类的友元才能访问它们的私有(private)字段。
LIVE

关于c++ - 对多个类重复使用运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60247447/

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