我正在尝试包装一个对象并希望将其作为指向函数的指针传递。已知该对象可以转换为有限类型,我想为这些类型提供转换运算符。例如:
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()调用int32_add(&a, &b)。我试过
const int32_t*() const { return &int32_storage_; }
const int64_t*() const { return &int64_storage_; }
但它不起作用。