Я хотел бы написать обобщенную функцию в C++Generic функции, чтобы получить отладочную строку для всех типов и коллекций в C++
template<class T>
string GetDebugString(const T& t);
который может универсально получает отладочную строку для всех типов. Моя проблема заключается в том, как использовать черты для различения между различными типами:
1) Примитивные типы и строки: получают прямое представление строки.
2) Тип и тип класса: вызывают его метод «string DebugString()». Я бы применил этот метод для всех классов. Метод мог бы вызвать рекурсивно вызов GetDebugString.
3) Указатели и умные указатели: разыменования них и последующие 1) или 2)
4) Коллекция, такие как вектор, набор или карт: перебрать весь его элемент, получить отладочную строку для каждого элемента следующие 1), 2) и 3) и собрать их в некоторых форматах.
Как мы можем это сделать с помощью std :: enable_if?
Вы можете использовать SFINAE, чтобы проверить, обрабатываете ли вы тип методом «DebugString» и перегружаете практически все остальное, о чем вы упомянули. Никаких признаков не требуется. Если вы выполните поиск на этих условиях, вы сможете копировать/скрестить что-то и просить о помощи по конкретным вопросам. –
Я могу использовать C++ 11. – yuefengz
Это могло бы помочь вам: http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers – Chnossos