c ++将字符串转换为void指针

ghi*_*boz 5 c++ string casting void void-pointers

我使用一个具有回调函数的库,其中一个参数是类型void *.(我想让我们发送任何类型的价值.)

我需要传递一个字符串(std::string或者char[]是一个相同的).

我怎样才能做到这一点?

Seb*_*fel 7

如果您确定该对象在函数的生命周期内是活动的(并且可以被修改),则可以对字符串指针进行强制转换,然后将其转换回回调中的引用:

#include <iostream>
#include <string>

void Callback(void *data) {
    std::string &s = *(static_cast<std::string*>(data));
    std::cout << s;
}

int main() {
    std::string s("Hello, Callback!");
    Callback( static_cast<void*>(&s) );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是 Hello, Callback!


Ker*_* SB 5

如果你有一个char数组,那么它可以隐式转换为void指针.如果您有C++字符串,则可以获取第一个元素的地址:

void f(void *);   // example

#include <string>

int main()
{
    char a[] = "Hello";
    std::string s = "World";

    f(a);
    f(&s[0]);
}
Run Code Online (Sandbox Code Playgroud)

确保std::string函数调用表达式的寿命更长.