- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
#include <iostream>
#include <type_traits>
#include <list>
#include <vector>
using std::cout;
using std::endl;
using function = int;
struct Console {
private:
template<typename SS, typename TT>
static auto test(int)
-> decltype(std::declval<SS&>() << std::declval<TT>(), std::true_type());
template<typename, typename>
static auto test(...) -> std::false_type;
template<typename T>
static const bool canCout = decltype(test<decltype(cout), T>(0))::value;
public:
template<typename T>
typename std::enable_if<std::is_same<decltype(std::declval<T>().begin()),
decltype(std::declval<T>().end())>::value && !canCout<T>>::type
log(T arg) {
log('[');
for (typename T::const_iterator it = arg.begin(); it != arg.end(); ++it) {
auto nextIt = it;
++nextIt;
if (nextIt != arg.end()) {
log(*it);
log(", ");
} else {
log(*it);
log(']');
}
}
}
template<typename T>
typename std::enable_if<canCout<T>>::type
log(T arg) {
cout << arg;
}
template<typename H, typename ... T>
void log(H arg, T... rest) {
log(arg);
log(' ');
log(rest...);
}
};
static Console console;
function main()
{
console.log(std::vector<int>({ 1, 2, 3 }), "Hello World!", 100.1, "\n");
console.log(std::string("std::string"), std::list<std::string>({ "one", "two", "three" }), '\n');
return 0;
}
Javascript++.
https://ideone.com/NykL0u
MacFerden 21.10.2017 19:28 # +5
для универсальности
Antervis 21.10.2017 20:00 # 0
1024-- 21.10.2017 20:06 # 0
Вот на другую строку переходит - это да, тут '\n' явный не нужен (хотя, тогда придётся существующий код с шаблонами переписать).
bormand 21.10.2017 20:20 # +8
Типичная динамическая питушня. Хочешь вывести 3 числа - ок, пожалуйста. Хочешь вывести 3 строки с произвольным содержимым, а они почему-то иногда друг в друга втыкаются... Вот нахуя было смешивать 2 функции с разной семантикой в одну?
З.Ы. Напомнило про ёбнутый конструктор у Array, где тоже смешали 2 разных семантики.
1024-- 21.10.2017 21:30 # 0
Но в случае с console.log это особо не мешает, чаще работает как фича.
С массивом - боль, да. Хотя, есть ли ситуации, когда это нельзя заменить на []? В голову приходит случаи неизлечимого катаморфизма головного мозга.
Fluttie 25.10.2017 07:54 # 0
Разная семантика это форматная строка и сложение строк параметров?
>Хочешь вывести 3 строки с произвольным содержимым, а они почему-то иногда друг в друга втыкаются...
Можно подробнее для неофитов?
1024-- 25.10.2017 17:50 # +5
> Можно подробнее для неофитов?
Хотим смотреть, что ввёл пользователь:
Сначала пользователь ввёл "Иванов", "Иван", "Иванович".
А потом - "0x%da%f4", "691", "4".
В первом случае распечатается как ожидал программист, во втором - совсем по-другому.
1024-- 21.10.2017 20:05 # +3
Упомянул ininializer_list, чтобы не писать явно, что это массив. Теперь можно так:
P.S. Пирфоманс я слил.
gost 21.10.2017 21:29 # +3
Красота!
SemaReal 21.10.2017 22:47 # +3
d_fomenok 25.10.2017 19:04 # 0
gost 25.10.2017 19:16 # +3
.
[/color]
TerraformGovno 07.01.2023 21:48 # 0
guest6 07.01.2023 20:11 # 0
hormand 07.01.2023 20:44 # 0
gost 21.10.2017 22:46 # +2
Расширил, отрефакторил и поправил пирфоманс.
Проблему с несколькими ininializer_list решить не удалось; господа метухи, что думаете?
SemaReal 21.10.2017 23:59 # 0
это еще зачем? чтобы как в PHP?
gost 21.10.2017 22:55 # +2
https://ideone.com/Rg3i4y
SemaReal 21.10.2017 22:59 # 0
во-вторых класс лучше называть большой буквы (пеп8)
в-третьих print() пишет в stdout, а это совершенно не обязательно консоль. И я даже не о пайпах и шеловых редиректах. Я мог бы сейчас завести километровую ветку про разницу между консолью и терминалом в разных ос, но не буду
gost 22.10.2017 09:47 # +2
bormand 22.10.2017 09:51 # +2
vistefan 23.10.2017 11:35 # +2
Лучше будь, в паре-тройке постов, как ты любишь.
------------------
см. далее -->
1024-- 22.10.2017 02:56 # 0
gost 22.10.2017 10:14 # +3
inho 25.10.2017 09:42 # +2
gost 25.10.2017 12:39 # +1
SemaReal 26.10.2017 05:30 # 0
gost 26.10.2017 06:02 # 0
guest6 07.01.2023 21:52 # +1
Fike 07.01.2023 23:42 # 0
guest6_uebok 07.01.2023 23:58 # 0