以下方法旨在将指向变量的指针转换回原始类型。
该方法应获得 2 个参数:指向变量的指针及其类型。
void myMethod(void *pointer, ? myType)
{
//convert the pointer to its original type
myType p = *((myType*) pointer);
}
用法:
int i = 3;
void *pointerToI = &i;
//The type to send to method
typedef decltype(i) myType;
myMethod(pointerToI, ? myType);
我应该如何声明第二个参数的类型?
注意该方法是虚拟的。
最佳答案
似乎您想要使用模板来代替,这是您通常“传递”类型的方式:
template <typename T>
T myMethod(void * pointer)
{
return *(T *)pointer;
}
后来:
typedef decltype(i) myType;
myType result = myMethod<myType>(pointerToI);
我唯一能想到的另一件事是提供一个 lambda 来执行任何需要的转换。但请注意,该类型只能出现在 lambda 中; myMethod
无法与类型进行任何交互,因为它不知道类型是什么。例如:
void myMethod(void * pointer, std::function<void(void *)> fn)
{
fn(pointer);
}
像这样调用:
myMethod(pointerToI, [] (void * p) { /* do something with p */ });
当然,这并不能真正让您达到 myMethod
的地步能够对类型做一些智能的事情,因为 myMethod
不能既是虚拟的又是模板。因此,这种方法不太可能对您有所帮助。 myMethod
无法返回转换后的指针,例如,因为没有您可以使用的返回类型(至少没有一种可能比 void *
更好用)。
关于c++ - 发送新类型作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25767933/