如何定义指针铸件操作员
how to define a pointer cast operator?
我正在尝试包装对象,并希望将其作为函数指针传递。该对象已知可以被铸造为有限类型,我想为这些类型提供铸造操作员。例如:
class MyInt {
public:
MyInt() {}
MyInt(int val): int32_storage_(val), int64_storage_(val*2) {}
const int32_t* GetInt32Ptr() const { return &int32_storage_; }
const int64_t* GetInt64Ptr() const { return &int64_storage_; }
private:
int32_t int32_storage_ = 0;
int64_t int64_storage_ = 0;
};
int32_t int32_add(const int32_t* iptr_a, const int32_t* const iptr_b) {
return *iptr_a + *iptr_b;
}
int64_t int64_add(const int64_t* iptr_a, const int64_t* const iptr_b) {
return *iptr_a + *iptr_b;
}
int main() {
MyInt a(10);
MyInt b(20);
std::cout << "32bit a + b = " << int32_add(a.GetInt32Ptr(), b.GetInt32Ptr()) << std::endl;
std::cout << "64bit a + b = " << int64_add(a.GetInt64Ptr(), b.GetInt64Ptr()) << std::endl;
return 0;
}
我期望用铸造操作员替换GetInt32Ptr()
,因此我可以像此int32_add(&a, &b)
一样调用int32_add()
。我尝试了
const int32_t*() const { return &int32_storage_; }
const int64_t*() const { return &int64_storage_; }
但是它不起作用。
您快到了,操作员定义的正确语法为:
operator const int32_t*() const { return &int32_storage_; }
operator const int64_t*() const { return &int64_storage_; }
还要注意,如下所述,您还可以使这些操作员explicit
通常需要防止不需要的转换。进行转换时需要更多的详细性,例如static_cast<const int32_t*>(a)
而不是a
。
当您希望该类型隐式转换为另一种类型时,您必须将其声明为operator
方法:
operator const int32_t*() const { return &int32_storage_; }
operator const int64_t*() const { return &int64_storage_; }
现在,为了调用函数,只需说a, b
即可被隐式转换:
std::cout << "32bit a + b = " << int32_add(a, b) << std::endl;
std::cout << "32bit a + b = " << int64_add(a, b) << std::endl;
注意:您的功能预选赛不一致(const int32_t*
(
他们都应该是 const T* const
std::endl
通常是错误的,用 'n'
替换为CCO_12-推理
您缺少操作员关键字。
operator const int32_t* () const { return &int32_storage_; }
operator const int64_t* () const { return &int64_storage_; }
相关文章:
- 如何定义指针铸件操作员
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- 基本操作员具有非指针类型
- 操作员的地址可以启动指针,但填充值是垃圾
- 静态指针指向会员数组的安全操作员[]访问
- 提取操作员在使用来自其他类名的指针时超载
- 创建库以覆盖迭代器的操作员*() - 风险悬挂指针
- 调用指针参数从const函数指向的对象的操作员
- 如何迫使新操作员返回的指针将是32字节对齐
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- C - 操作员 - =在指针上
- 操作员超载和 *该指针的麻烦
- 在操作员过载的情况下处理悬空指针/参考
- Ostream操作员Strangley不接受我的堆栈指针
- 我何时应该将指针从操作员函数中返回对象(而不是对象)
- 操作员=用双指针超载用于分数数学
- 带有超载操作员 的无访问地址的指针返回
- 带指针的奇怪操作员
- C /参考操作员和指针中的插座连接()函数说明
- munmap_chunk 当操作员调用时指针无效,然后调用 destroctor