Конкатенация строк с целыми числами - PullRequest
0 голосов
/ 30 апреля 2011

Damage и Cost - целые числа, но, как вы можете видеть из кода ниже, я хочу объединить их со строкой (если это правильное слово).Как я могу это сделать?

class Weapon : Shopable{
    private:
        int Damage;
    public:
        std::string getDesc() const{
            return getName()+"\t"+Damage+"\t"+Cost;
        }
};

Ответы [ 3 ]

7 голосов
/ 30 апреля 2011

Предоставьте себе этот шаблон:

#include <sstream>

template <class TYPE> std::string Str( const TYPE & t ) {
    std::ostringstream os;
    os << t;
    return os.str();
}

Затем вы можете сказать:

return getName() + "\t" + Str( Damage ) + "\t" + Str(Cost);

Обратите внимание, что это в значительной степени эквивалентно Boost's lexical_cast и аналогичным средствам впредстоящий стандарт.Также обратите внимание, что эта функция меняет производительность для удобства и безопасности типов.

2 голосов
/ 01 мая 2011

Вы уже приняли ответ @ unapersson, но для протокола я бы сделал это ...

std::string getDesc() const
{
    std::ostringstream ss;
    ss << getName() << "\t" << Damage << "\t" << Cost;
    return ss.str();
}

Он создает только один объект потока вместо того, чтобы создавать и выбрасывать их для каждого преобразования, и выглядит немного лучше.

(Это способ C ++ - здесь нет общего элемента toString, как в других языках, обычно мы используем строковые потоки или одноразовую функцию, как в ответе @ unapersson.)

2 голосов
/ 30 апреля 2011

Вы можете использовать boost::lexical_cast следующим образом:

return getName()+"\t"+boost::lexical_cast<std::string>(Damage)+
  "\t"+boost::lexical_cast<std::string>(Cost);
...