Skip to content

mirmik/nos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Feb 5, 2025
dc4af37 · Feb 5, 2025
Feb 28, 2023
Feb 5, 2025
Nov 28, 2022
Sep 7, 2021
Jun 11, 2021
Feb 5, 2025
Feb 4, 2025
Feb 1, 2023
Jul 13, 2022
Aug 4, 2022
Apr 3, 2019
Jul 19, 2022
Feb 4, 2025
Aug 8, 2022
Nov 4, 2021
Feb 5, 2025
Jun 5, 2023

Repository files navigation

nos

Printing, tracing and loging library.

Printing

Основные функции:

Функция 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 с кастомными типами.

  1. Перегрузка оператора вывода 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!!!
  1. Перегрузка функции 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)
  1. Определение метода 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)
  1. Специализация структуры 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

Трассировка

Логирование

About

Printing, tracing and loging library.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages