Во-первых, я бы рекомендовал вам рассмотреть возможность предоставления неявного преобразования. Вы можете обнаружить, что ситуации, когда неожиданные конверсии не пойманы, поскольку ошибки перевешивают стоимость звонка encode
, когда вы хотите char*
.
Если вы решили обеспечить неявное преобразование вы объявляете это так (внутри определения класса
operator char*();
Вы могли бы быть в состоянии сделать метод сопзИте, в этом случае вы можете использовать:.
operator char*() const;
Обычно вы также хотите, чтобы вернуть указатель на немодифицируемые буфера:
operator const char*() const;
В теле вашей функции вы должны указать return
соответствующий указатель. Поскольку клиенты с неявным преобразованием не ожидали бы освобождения возвращаемого буфера, поэтому, если вам нужно создать специальный буфер для возвращаемого значения, вам нужно будет поддерживать указатель на этот буфер до подходящего момента, чтобы освободить его. Обычно такой подходящий момент может быть следующей мутационной операцией на вашем объекте класса.
Обратите внимание, что как printf
принимает любое количество и тип необязательных аргументов, вам все равно нужно было бы использовать объект класса в любом случае.
printf("%s\n", static_cast<const char*>(a + b + c[1] + d));
или
printf("%s\n", (const char*)(a + b + c[1] + d));
Оба эти более многословен, чем явный вызов encode
.
+1 Больше лучшего объяснения, чем у меня :) – AraK
Большое спасибо за совет. Я буду думать о плюсах и минусах и проверить, действительно ли имплицитно. –
(Извините, что вы еще не приняли свой ответ, поэтому ограничивают мою частоту приема, поэтому я должен подождать несколько минут) –