Printing, tracing and loging library.
Функция print
. print
может объекты различных типов:
nos::print("Hello");
nos::print(42);
nos::print(0.45);
//output: Hello420.45
При указании нескольких аргументов - выводит их через пробел.
nos::print("Hello", 42); //output: Hello 42
Функция println
. Поведение аналогично print
. В конце выводится "\r\n":
nos::println("Hello", 42); //output: Hello 42\r\n
Существует множество способов подружить nos с кастомными типами.
- Перегрузка оператора вывода std::ostream.
nos умеет выводить на печать стандартные типы. Форматирование ввода-вывода также поддерживается.
struct A
{
int a = 42;
friend std::ostream& operator << ( std::ostream& os, const A&);
};
std::ostream& operator << ( std::ostream& os, const A& a)
{
os << std::hex << a.a << "A!!!";
}
...
nos::println(A()); //2aA!!!
- Перегрузка функции
int nos_print ( nos::ostream& os, const A& a )
.
struct A
{
int a = 42;
};
int nos_print ( nos::ostream& os, const A& a )
{
int ret = 0;
ret += os.print("A(");
ret += os.print(a.a);
ret += os.print(")");
return ret;
}
...
nos::println(A()); //A(42)
- Определение метода
int print_to (nos::ostream& os)
const для класса.
struct A
{
int a = 42;
int print_to (nos::ostream& os) const
{
int ret = 0;
ret += os.print("A(");
ret += os.print(a.a);
ret += os.print(")");
return ret;
}
};
...
nos::println(A()); //A(42)
- Специализация структуры
nos::print_implementation
для типа.
struct A
{
int a = 42;
};
namespace nos
{
template <> struct print_implementation<A>
{
static int print_to ( nos::ostream& os, const A& a )
{
int ret = 0;
ret += os.print("A(");
ret += os.print(a.a);
ret += os.print(")");
return ret;
}
};
}
...
nos::println(A()); //A(42)
Функция fprint(const char * fmt, const Args& ... args)
.
Функция осуществляет форматированный вывод:
nos::fprint("How are you? {}. How old are you? {}.", "I'm fine", 42);
//output: How are you? I'm fine. How old are you? 42.
Использование нумерации аргументов:
nos::fprint("{0} + {1} = {1} + {0}", "a", "b");
//output: a + b = b + a
Поддерживаются именованные аргументы.
nos::fprint("{a} + {b} = {1} + {0}", "a"_a="42", "b"_a="24");
//output: 42 + 24 = 24 + 42
Опции форматирования:
nos::fprint("{>8f_}", "Foo");
//output: _____Foo