У меня есть класс SpecialString. У него есть функция перегрузки / преобразования оператора, которую он использует каждый раз, когда его выдают как const char *. Затем он возвращает нормальную c-строку.
class SpecialString
{
...
operator char* () const { return mCStr; }
...
};
Раньше это работало очень давно (буквально 19 лет назад), когда я передавал их непосредственно в printf (). Компилятор был достаточно умен, чтобы знать, что аргумент должен был быть char *, и он использовал функцию преобразования, но теперь g ++ жалуется.
SpecialString str1("Hello"), str2("World");
printf("%s %s\n", str1, str2);
ошибка: невозможно передать объект не POD типа 'SPECIALSTRING' (он же 'SpecialString') через метод с переменным числом аргументов;вызов будет прерван во время выполнения [-Wnon-pod-varargs]
Есть ли способ заставить это работать снова без изменения кода? Я могу добавить функцию перегрузки оператора deref, которая возвращает строку c и передает объекты SpecialString следующим образом.
class SpecialString
{
...
operator CHAR* () const { return mCStr; }
char* operator * () const { return mCStr; }
...
};
SpecialString str1("Hello"), str2("World");
printf("%s %s\n", *str1, *str2);
Но я бы предпочел этого не делать, потому что для этого необходимо вручную изменить тысячи строк кода.