gpt4 book ai didi

c++ - 运算符重载 C++ 放置

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

我无法弄清楚在哪里放置我创建的重载运算符。他们应该在他们操作的类(class)里,还是在里面?这两种方式都给我带来了麻烦。任何指针都会很棒。

这是我最基本的 uint128_t 类:

class uint128_t{
private:
uint64_t UPPER, LOWER;

public:
// constructors
uint128_t(){
UPPER = 0;
LOWER = 0;
}

template <typename T>
uint128_t(T val){
UPPER = 0;
LOWER = (uint64_t) val;
}

template <typename S, typename T>
uint128_t(const S & upper_val, const T & lower_val){
UPPER = (uint64_t) upper_val;
LOWER = (uint64_t) lower_val;
}

uint128_t(uint128_t val){
UPPER = val.upper();
LOWER = val.lower();
}

uint64_t upper(){
return UPPER;
}

uint64_t lower(){
return LOWER;
}
};

如果运算符(operator)在类里面,他们工作正常。但是,我可以执行 uint128_t ^ uint32_t 但不能执行 uint32_t ^ uint128_t。另一方面,将所有内容移到外面会给我 error: 'uint128_t operator=(uint128_t, T)' must be a nonstatic member function。此外,operator= 显然不适用于常量输入,因为值将是 ULLL,它不存在,除非有人知道这样做的方法。

我该怎么办?

最佳答案

为什么不把两者结合起来呢?将 operator= 放在里面,其余的放在外面。

对于将 uint128_t 作为左侧参数的那些,没关系,如果它是右侧参数,那么它必须是全局函数。因此,出于这个原因,如果它们是全局的,您可以将这两个函数并排放置。如果仅针对可交换的宏,您甚至可以使用一个聪明的宏来实现两者的一个实现。

关于c++ - 运算符重载 C++ 放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119306/

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