наверное вопрос о дизайне
От: jyuyjiyuijyu  
Дата: 06.03.13 12:50
Оценка:
Всем привет

имеется некий класс в кишках работющий с АПИ системы конкретно с LPCWSTR
в интерфейсе у класса торчит const std::wstring& ...

что можно сделать чтоб внутри класса избавиться от множетственных .c_str()
при передаче строк системе ?

выглядит это примерно так

struct test
{
    void f(const std::wstring& ...)
    {
        doSmth(...c_str());
    }
};


и таких мест внутри класса где делается .c_str() много...

ничего не придумано?

спасибо
Re: наверное вопрос о дизайне
От: Abyx Россия  
Дата: 06.03.13 12:52
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

есть CString с `operator TCHAR*`
In Zen We Trust
Re: наверное вопрос о дизайне
От: rg45 СССР  
Дата: 06.03.13 13:30
Оценка: 6 (3) +5 :)
Здравствуйте, 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
}
--
Не можешь достичь желаемого — пожелай достигнутого.
Re: наверное вопрос о дизайне
От: mjau  
Дата: 07.03.13 15:51
Оценка:
Здравствуйте, 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() должен оптимизироваться компилятором до "бесплатного" взятия указателя без вызова функции, так что никакой проблемы здесь нет.
Каждый, просыпаясь утром, должен задавать себе вопрос — что он может сегодня сделать, чтобы россиянства
Автор: Kerk
Дата: 21.08.22
в мире стало меньше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.