У меня есть две функции, которые я перегрузил для моего класса отладки:
template<class IteratorT>
inline debug&
operator()(const std::string& name,
IteratorT begin,
IteratorT end)
{
_stream << indent(internal) << "g< " << name << " : [ ";
for (auto i = begin; i != end; i++)
_stream << (*i) << " ";
_stream << "] >" << std::endl;
return *this;
}
И
inline debug&
operator()(const std::string& name,
std::vector<uint8_t>::const_iterator begin,
std::vector<uint8_t>::const_iterator end)
{
_stream << indent(internal) << "u8< " << name << " : [ " << std::hex;
std::copy(begin, end, std::ostream_iterator<uint32_t>(_stream, " "));
_stream << "] >" << std::endl;
return *this;
}
Вот фрагмент кода его использования:
int main()
{
debug log;
std::vector<uint8_t> vec;
vec.push_back(0xde);
vec.push_back(0xad);
vec.push_back(0xc0);
vec.push_back(0xde);
log("vec", vec.begin(), vec.end());
}
Вывод (поскольку он не печатается в виде шестнадцатеричных символов, я пропустил неформатированный результат):
g< "vec" : [ ... ] >
Вместо
u8< "vec" : [ de ad c0 de ] >
По какой-то причине компилятор невыбор правильной, перегруженной функции.
$ g++47 --version
g++47 (GCC) 4.7.0 20120224 (experimental)