boost::format char as int
От: yatagarasu Беларусь  
Дата: 19.01.10 14:08
Оценка:
Чет я туплю, подскажите как сабжем вывести чары как инты?

#include <boost/format.hpp>

#include <string>

#include <cstdio>

template <typename T>
std::string print(const T &t)
{
    return (boost::format("%1% tolerance.") % t).str();
}

int main()
{
    int i = 0;
    char c = 0;

    std::printf("%s\n", print(i).c_str());
    std::printf("%s\n", print(c).c_str());
}


выводит

[code]
0 tolerance

[code]

что не айс.
boost::format("%1$d") не помогло. так же не хочется потерять поддержку вывода флоатов.
boost format char int
Re: boost::format char as int
От: Chorkov Россия  
Дата: 19.01.10 17:20
Оценка:
Здравствуйте, yatagarasu, Вы писали:

Y>Чет я туплю, подскажите как сабжем вывести чары как инты?


Y>
Y>#include <boost/format.hpp>

Y>#include <string>

Y>#include <cstdio>

Y>template <typename T>
Y>std::string print(const T &t)
Y>{
Y>    return (boost::format("%1% tolerance.") % t).str();
Y>}
Y>int main()
Y>{
Y>    int i = 0;
Y>    char c = 0;

Y>    std::printf("%s\n", print(i).c_str());
Y>    std::printf("%s\n", print(c).c_str());
Y>}
Y>


Y>выводит



Y>что не айс.

Y>boost::format("%1$d") не помогло. так же не хочется потерять поддержку вывода флоатов.

Очевидно, нужно специализировать шаблон для char.

template <typename T>
std::string print(const T &t)
{
    return (boost::format("%1% tolerance.") % t).str();
}

inline
std::string print(const char &t)
{
    return print((int)t);
}


Если твой пример, сильно упрощен, по сравнению с исходной задачей, то вероятно, проще вынести специализируемую часть в отдельный класс:


template <typename T>
struct print_specification_traits
{
    static const char * specification;

};

template <typename T>
std::string print(const T &t)
{
    return (boost::format( print_specification_traits<T>::specification ) % t).str();
}

template <typename T>
const char * print_specification_traits<T>::specification = "%1% tolerance.";

const char * print_specification_traits<char>::specification = "%1$d"; 

};
Re: boost::format char as int
От: Юрий Жмеренецкий ICQ 380412032
Дата: 19.01.10 19:07
Оценка: 2 (1)
Здравствуйте, yatagarasu, Вы писали:

Y>Чет я туплю, подскажите как сабжем вывести чары как инты?


Как вариант:

template <typename T>
std::string print(const T &t)
{
    return (boost::format("%1% tolerance.") % +t).str();
}


Возможно более читабельным выглядит 't + 0', но такая запись (без дополнительных скобок) здесь не подойдет из-за приоритетов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.