Имя параметра и параметр в шаблоне
От: yaser Украина  
Дата: 23.11.16 22:31
Оценка:
Привет.
Подскажите, как сделать что-то типа такого:
template <class T>
void print(const T& v){
std::cout << name(T) << ":" << v << std::endl;

}

Высшая цель

int a = 5;
double b = 0.1f;
std::string t = "44444";
print(a,b,t)
написало:
"a" = 5, "b" = 0.1f, "t" = "44444"

Возможно кто-то реализовывал такое, подскажите. Заранее спасибо.
Re: Имя параметра и параметр в шаблоне
От: niXman Ниоткуда https://github.com/niXman
Дата: 23.11.16 22:41
Оценка:
макросами.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Имя параметра и параметр в шаблоне
От: niXman Ниоткуда https://github.com/niXman
Дата: 23.11.16 23:25
Оценка:
вот рабочий набросок. доредактируйте __MY_ENUM_ARGS_6 и остальные.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Имя параметра и параметр в шаблоне
От: Кодт Россия  
Дата: 25.11.16 14:55
Оценка:
Здравствуйте, niXman, Вы писали:

X>вот рабочий набросок. доредактируйте __MY_ENUM_ARGS_6 и остальные.


BOOST_PP_STRINGIZE
BOOST_PP_VARIADIC_TO_SEQ
BOOST_PP_SEQ_FOR_EACH

http://ideone.com/IlMWMR
#include <iostream>

#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>

void print() {}

template<class T, class... STs>
void print(std::pair<const char*, T> const& arg, STs&&... args) {
    std::cout << arg.first << "=" << arg.second << std::endl;
    print(args...);
}

template<class... STs>
void print(std::nullptr_t, STs&&... args) {
    print(args...);
}

#define FOR_ONE(r,_,var) , std::make_pair(BOOST_PP_STRINGIZE(var), (var))

#define PRINT(...) print(nullptr BOOST_PP_SEQ_FOR_EACH(FOR_ONE, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))

int main() {
    PRINT(1, 2+3, 4+5+6);
    std::cout << BOOST_PP_STRINGIZE(PRINT(1, 2+3, 4+5+6)) << std::endl;
}


Не стал заморачиваться с операторной свёрткой, сделал через рекурсию.
В принципе, с таким же успехом можно было сделать прямо в cout:
#define FOR_ONE(r,_,var) << "'" << BOOST_PP_STRINGIZE(var) << "' = " << (var) << std::endl
#define PRINT(...) std::cout BOOST_PP_SEQ_FOR_EACH(FOR_ONE, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) ;
Перекуём баги на фичи!
Отредактировано 25.11.2016 14:56 Кодт . Предыдущая версия .
Re[3]: Имя параметра и параметр в шаблоне
От: niXman Ниоткуда https://github.com/niXman
Дата: 28.11.16 13:58
Оценка:
Здравствуйте, Кодт, Вы писали:

с бустом и я могу. а ты без буста
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.