gpt4 book ai didi

c++ - 如何使类定义之外的运算符重载优先?

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

我定义了以下运算符:

std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint8_t b);
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint32_t b);

使用 int 调用运算符时,我得到错误:

/misc.hpp:77:12: error: ambiguous overload for ‘operator<<’ (operand types are ‘std::vector<unsigned char>’ and ‘int’)
buffer << first;
~~~~~~~^~~~~~~~
./misc.hpp:62:23: note: candidate: std::vector<unsigned char>& operator<<(std::vector<unsigned char>&, uint8_t)
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint8_t b);
^~~~~~~~
./misc.hpp:63:23: note: candidate: std::vector<unsigned char>& operator<<(std::vector<unsigned char>&, uint32_t)
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint32_t b);

我可以制作 uint8_t 吗?版本优先,所以我不需要类型转换,例如 static_cast<uint8_t>调用该运算符?

最佳答案

您可以通过将第二个模板设为模板来破解它:

std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint8_t b);

template<class Y>
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, Y b);

重载解析总是倾向于非模板函数而不是模板函数,因此该技术引入了足够的层次结构。如果您不希望发出过多的 Y 类型,请对 Y 类型求助于静态断言。

不过,对 int 的进一步重载可能是明智的做法。

关于c++ - 如何使类定义之外的运算符重载优先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45860034/

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