сейчас это выглядит так
foo3(series_builder<int>()<< 1 << 2 << 3, table<int>() << 4 << 5 << 6);
в причесаном виде после препроцессора должно быть так
d.put(%i%<int><< 1 << 2 << 3, %t%<string> << "4" << "5" << "6");
Хочется написать "по современному" ,т.е. c проверка типов на этапе компиляции .
Посмотрел на форуме предложенное Кодт, кое что изменил под себя. В итоге
для int, long работает, а для char, string выдаётся ошибка. Текст полностью ниже. (посмотрел книгу Александреску и библиотеку Loki, не совсем понял как они решили этот вопрос, примеров не нашёл. Есть еще Boost Libraries, но примеров тоже мало, пожее решение есть в QT). И вообще покритикуйте может я
слишком всё усложнил, и вообще это решить не возможно.
Со строками должно помочь выделенное. Для символов, нужно по идее любо константы символьные передавать, либо специализировать. Можно вместо static_cast свою функцию преобразования поставить и специализировать ее для преобразования const char* в char.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[2]: Переменное число параметров функции по формату
От:
Аноним
Дата:
15.03.07 06:53
Оценка:
Здравствуйте, dr.Chaos,
DC>Со строками должно помочь выделенное. Для символов, нужно по идее любо константы символьные передавать, либо специализировать. Можно вместо static_cast свою функцию преобразования поставить и специализировать ее для преобразования const char* в char.
Не помогло, ошибка компиляции
Re[3]: Переменное число параметров функции по формату
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, dr.Chaos,
DC>>Со строками должно помочь выделенное. Для символов, нужно по идее любо константы символьные передавать, либо специализировать. Можно вместо static_cast свою функцию преобразования поставить и специализировать ее для преобразования const char* в char.
А>Не помогло, ошибка компиляции
Ты хоть код приведи что ли и ошибку, а то я на семинар по телепатии еще не ходил.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[4]: Переменное число параметров функции по формату
От:
Аноним
Дата:
15.03.07 10:04
Оценка:
Здравствуйте, dr.Chaos,
DC>Ты хоть код приведи что ли и ошибку, а то я на семинар по телепатии еще не ходил.
Format_1.cpp(93): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion)
Format_1.cpp(58): warning C4018: '<' : signed/unsigned mismatch
....
Короче не может преобразовать char[2] в char похоже что тащит широкий символ в обычный — неясно зачем и почему. Зато со string все ОК и так
const table& operator<<(const T& v) const// константность - потому что это rvalue->const lvalue
{
cont_.push_back(v);
return *this;
}
и так
//dr.Chaostemplate<typename Y>
const table& operator<<(const Y& v) const// константность - потому что это rvalue->const lvalue
{
cont_.push_back(static_cast<T>(v));
return *this;
}
Привожу результаты труда ниже.
Хочется ещё и тактго (препроцессором интересно можно)
foo(table%i, table%l, table%s)( 1 , 2, 3),(4, 5, 6),( a, b,c);
ну или
foo(table%i, table%l, table%s)( 1 , 2, 3)(4, 5, 6)( a, b,c);
Re[4]: Переменное число параметров функции по формату
От:
Аноним
Дата:
15.03.07 10:21
Оценка:
Здравствуйте, dr.Chaos
ЗЗЗ!!!
//dr.Chaos
template<typename Y>
const table& operator<<(const Y& v) const // константность - потому что это rvalue->const lvalue
{
cont_.push_back(static_cast<T>(v));
return *this;
}
на вызов foo(table<char>() << "6" << "77" << "87");
Ошибка в строке const table& operator<<(const Y& v) const
Format_1.cpp(46): error C2440: 'static_cast' : cannot convert from 'const char [2]' to 'char'
Format_1.cpp(46): error C2440: 'static_cast' : cannot convert from 'const char [3]' to 'char'
а на вызов foo(table<char>() << "6" << "77" << "87");
Format_1.cpp(46): error C2440: 'static_cast' : cannot convert from 'const char [2]' to 'char'
Format_1.cpp(92): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion)
А этот код
const table& operator<<(const T& v) const// константность - потому что это rvalue->const lvalue
{
cont_.push_back(v);
return *this;
}
[code]
Ошибка в main() строке foo(table<char>() << "6" << "77" << "87");
[/code]
Format_1.cpp(92): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion)
Возможна реальная ошибка в функции
void foo(const table <char>& series)
Re[5]: Переменное число параметров функции по формату
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, dr.Chaos,
DC>>Ты хоть код приведи что ли и ошибку, а то я на семинар по телепатии еще не ходил. А>Format_1.cpp(93): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion) А>Format_1.cpp(58): warning C4018: '<' : signed/unsigned mismatch А>....
А>Короче не может преобразовать char[2] в char похоже что тащит широкий символ в обычный — неясно зачем и почему. Зато со string все ОК и так
А с чего бы ему преобразовывать char[2] = {'6','\0'} (массив char'ов) в один char? Я же сказал, напиши специализацию для char'a.
Опечатка а на вызов foo(table<char>() << "6" << "77" << "87"); Читать а на вызов foo(table<char>() << "6" << "7" << "8");
Format_1.cpp(46): error C2440: 'static_cast' : cannot convert from 'const char [2]' to 'char'
Опечатка
Format_1.cpp(92): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const char [2]' (or there is no acceptable conversion)
Читать Случайно попавший текст
Re[6]: Переменное число параметров функции по формату
PWW>Теперь компилятор запутывается на foo(table<long>() << 4 << 5 << 6);
PWW>пишет что не может конвертировать int а long.
Где именно не может конвертировать? В операторе <<, в my_cast??
PWW>Возникает вопрос — а как вообще отлаживать шаблоны? Ошибки могут быть и в другом месте программы. Есть технологии?
Только мозги и знание механизма инстанирования .
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[8]: Переменное число параметров функции по формату
Если ты my_cast запихнул в table (зачем только не ясно ), поставь ему что ли const . А вообще это внешняя функция.
P.S. Компилировать я не буду, я дал совет как это решить. Ты бы и сам до этого быстро дошел, если бы почитал книжки по шаблонам Джосатиса например здесь кажись было.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[10]: Переменное число параметров функции по формату
Здравствуйте, dr.ChaosНу сказано же — Доработать напильником . Поставь там const'ы где надо и все заработает.
Короче странная ситуация, всё это не работает похоже только потому что компилятор подставляет первым шаблоную my_cast, а на второй не шаблонный не реагирует. Хотя у Джосатиса написано что приоритет у не шаблонных функций.
(хотя возможно перегруженый оператор << подсовавает не то)