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

时间:2013-01-27 23:57:22

标签: c++ string casting void void-pointers

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

我需要传递一个字符串(std::stringchar[]是相同的)。

我该怎么做?

3 个答案:

答案 0 :(得分: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;
}

输出为Hello, Callback!

答案 1 :(得分:5)

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

void f(void *);   // example

#include <string>

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

    f(a);
    f(&s[0]);
}

确保std::string比函数调用表达式更长。

答案 2 :(得分:2)

如果是您提供的回调函数,则只需传递std::string对象的地址

void f(void* v_str)
{
  std::string* str = static_cast<std::string*>(v_str);
  // Use it
}
...
...
std::string* str = new std::string("parameter");
register_callback(&f, str);

无论哪种方式,如Kerrek SB所说,确保字符串对象的生命周期至少与回调正在使用的时间跨度一样长。