试图通过将它包装成 void* 来获得一个 int,然后再次将它包装回 Integer,但我没有成功
Trying to get an int by wraping it into void* and again wrap it back into Integer but i am not successfull
#include <iostream>
class Singleton {
static Singleton instance;
int num;
Singleton() = default;
Singleton(Singleton &) = delete;
Singleton(Singleton &&) = delete;
Singleton &operator=(Singleton &) = delete;
public:
static Singleton &GetInstance() {
return instance;
}
void* get(){
return (void*)num;
}
void setNum(const int num){
this->num = num;
}
};
Singleton Singleton::instance;
int main() {
Singleton::GetInstance().setNum(12);
std::cout << *(static_cast<int*>(Singleton::GetInstance().get())) << std::endl;
}
所以我感兴趣的领域在于这个功能
void* get(){
return (void*)num;
}
并在 int main
内接收
std::cout << *(static_cast<int*>(Singleton::GetInstance().get())) << std::endl;
但我的输出不清楚,我认为这是一些 udefine 行为,但我的目标是打印已经通过的 12
。如果有适当的参考,将不胜感激任何人的帮助。
如果您需要 return 一个整数值作为通用指针 (void*
) 那么您真的应该分两步进行转换:首先转换为一个足够大的整数类型既是整数又是指针,那么在第二步中指向泛型指针:
void* get()
{
return reinterpret_cast<void*>(static_cast<std::intptr_t>(num));
}
那么当你使用 returned 指针时,你必须记住它实际上 不是 你 returned 的指针,而是实际的整数价值本身。这意味着您需要在使用该值时进行相反的转换,而不是试图以任何方式取消引用它:
auto value_ptr = Singleton::GetInstance().get();
std::cout << static_cast<int>(reinterpret_cast<std::intptr_t>(value_ptr)) << '\n';
我真的不建议通常以这种方式使用值作为指针。有几个地方可能需要它,但这似乎不是其中之一。
另一种可能的解决方案实际上是return 一个指向变量num
:
的指针
void* get()
{
return #
}
因为这实际上是一个指针,您应该取消引用它以获取它指向的值:
auto value_ptr = Singleton::GetInstance().get();
std::cout << *static_cast<int*>(value_ptr) << '\n';
#include <iostream>
class Singleton {
static Singleton instance;
int num;
Singleton() = default;
Singleton(Singleton &) = delete;
Singleton(Singleton &&) = delete;
Singleton &operator=(Singleton &) = delete;
public:
static Singleton &GetInstance() {
return instance;
}
void* get(){
return (void*)num;
}
void setNum(const int num){
this->num = num;
}
};
Singleton Singleton::instance;
int main() {
Singleton::GetInstance().setNum(12);
std::cout << *(static_cast<int*>(Singleton::GetInstance().get())) << std::endl;
}
所以我感兴趣的领域在于这个功能
void* get(){
return (void*)num;
}
并在 int main
std::cout << *(static_cast<int*>(Singleton::GetInstance().get())) << std::endl;
但我的输出不清楚,我认为这是一些 udefine 行为,但我的目标是打印已经通过的 12
。如果有适当的参考,将不胜感激任何人的帮助。
如果您需要 return 一个整数值作为通用指针 (void*
) 那么您真的应该分两步进行转换:首先转换为一个足够大的整数类型既是整数又是指针,那么在第二步中指向泛型指针:
void* get()
{
return reinterpret_cast<void*>(static_cast<std::intptr_t>(num));
}
那么当你使用 returned 指针时,你必须记住它实际上 不是 你 returned 的指针,而是实际的整数价值本身。这意味着您需要在使用该值时进行相反的转换,而不是试图以任何方式取消引用它:
auto value_ptr = Singleton::GetInstance().get();
std::cout << static_cast<int>(reinterpret_cast<std::intptr_t>(value_ptr)) << '\n';
我真的不建议通常以这种方式使用值作为指针。有几个地方可能需要它,但这似乎不是其中之一。
另一种可能的解决方案实际上是return 一个指向变量num
:
void* get()
{
return #
}
因为这实际上是一个指针,您应该取消引用它以获取它指向的值:
auto value_ptr = Singleton::GetInstance().get();
std::cout << *static_cast<int*>(value_ptr) << '\n';