Привет.
Подскажите, как сделать что-то типа такого:
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"
Возможно кто-то реализовывал такое, подскажите. Заранее спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
вот рабочий набросок. доредактируйте __MY_ENUM_ARGS_6 и остальные.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, 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__)) ;
Здравствуйте, Кодт, Вы писали:
с бустом и я могу. а ты без буста
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)