Во-первых, я бы порекомендовал не использовать void * Есть очень немного ситуаций, когда вам нужно использовать void *, и вы потеряете любую полезную информацию о типе.
Если вы хотите манипулировать битами непосредственно в std:: string object, затем из C ++ 17, метод data on string предоставляет доступ к символам напрямую, не будучи константой.
Если вы хотите сделать свой код более безопасным, просто сохраните std :: string в качестве членапеременной вашего класса Foo, и используйте доступные вам методы.Это также означает, что вам не нужно будет вручную отслеживать внутренний указатель строки, передаваемой из c_str или вызовов метода данных.
Например (частичный пример)
class Foo {
public:
Foo(const std::string& str);
const char* getData() const;
char* getData();
private:
std::string m_str;
};
Foo::Foo(const std::string& str)
: m_str(str)
{
}
const char* Foo::getData() const
{
return m_str.c_str();
}
char* Foo::getData()
{
// Note: Need C++ 17
return m_str.data();
}