Всем привет
имеется некий класс в кишках работющий с АПИ системы конкретно с LPCWSTR
в интерфейсе у класса торчит const std::wstring& ...
что можно сделать чтоб внутри класса избавиться от множетственных .c_str()
при передаче строк системе ?
выглядит это примерно так
struct test
{
void f(const std::wstring& ...)
{
doSmth(...c_str());
}
};
и таких мест внутри класса где делается .c_str() много...
ничего не придумано?
спасибо
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>имеется некий класс в кишках работющий с АПИ системы конкретно с LPCWSTR
J>в интерфейсе у класса торчит const std::wstring& ...
J>что можно сделать чтоб внутри класса избавиться от множетственных .c_str()
J>при передаче строк системе ?
J>выглядит это примерно так
J>J>struct test
J>{
J> void f(const std::wstring& ...)
J> {
J> doSmth(...c_str());
J> }
J>};
J>
J>и таких мест внутри класса где делается .c_str() много...
J>ничего не придумано?
Пусть тебе душу согреет мысль о том, что эти несколько символов уберегают тебя от коварных, трудноуловимых ошибок, являющихся следствием возможности неявных преобразований:
#include <iostream>
#include <string>
class String : public std::string
{
public:
String() { }
String(const char* v) : basic_string(v) { }
operator const char*() const { return c_str(); }
};
void foo(const String&, bool) { }
int main()
{
foo(false, String("Hello!")); // Compilation is still success regardless of we've swapped actual parameters
}
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>Всем привет
J>имеется некий класс в кишках работющий с АПИ системы конкретно с LPCWSTR
J>в интерфейсе у класса торчит const std::wstring& ...
J>что можно сделать чтоб внутри класса избавиться от множетственных .c_str()
J>при передаче строк системе ?
1)
struct test
{
void f(const LPCWSTR ...)
{
doSmth(...);
}
};
2)
struct test
{
void f(const std::wstring& ...)
{
LPCWSTR cStr = ...c_str();
doSmth(cStr);
}
};
3)
на самом деле c_str() должен оптимизироваться компилятором до "бесплатного" взятия указателя без вызова функции, так что никакой проблемы здесь нет.