C ++ преобразовать строку в пустой указатель

Я использую библиотеку, которая имеет функцию обратного вызова, где один из параметров имеет тип void *, (Я полагаю, чтобы позволить отправить значение любого типа.)

Мне нужно передать строку (std::string или char[] та же).

Как я могу это сделать?

4

Решение

Если вы уверены, что объект жив (и может быть изменен) в течение времени жизни функции, вы можете выполнить приведение к строковому указателю, превратив его обратно в ссылку в обратном вызове:

#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!

7

Другие решения

Если у вас есть массив символов, он может быть неявно преобразован в пустой указатель. Если у вас есть строка C ++, вы можете взять адрес первого элемента:

void f(void *);   // example

#include <string>

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

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

Убедитесь, что std::string переживает выражение вызова функции.

4

Если это функция обратного вызова, которая вы поставляете, чем вы можете просто передать адрес 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, убедитесь, что время жизни строкового объекта не меньше, чем промежуток времени, в течение которого используется обратный вызов.

2
По вопросам рекламы [email protected]