перегрузка шаблонов функций в MSVC++
От: amyznikov  
Дата: 03.06.09 23:34
Оценка:
Привет!
Собственно, вот чего хочу:

template<double (*fn)(double)>
void f()
{ printf("I am in 1\n");
}

template<double (*fn)(double,double)>
void f()
{ printf("I am in 2\n");
}

int main()
{
f<sin>();
f<hypot>();

return 0;
}

Тока MSVC++ это не компилит (в линухе работает без проблем).
Можно ли как-то заставить это компилиться и в MSVC++ тоже ?
Заранее спасибо!

04.06.09 14:54: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
msvc++ шаблоны перегрузка функций
Re: перегрузка шаблонов функций в MSVC++
От: Bell Россия  
Дата: 04.06.09 04:22
Оценка:
Здравствуйте, amyznikov, Вы писали:

Очень похоже на баг MSVC. Вот такой упрощенный пример тоже не компилится:
template <int* pi>
void f()
{
}

template <long* pl>
void f()
{
}

int i = 0;
long l = 0;

int main()
{
   f<&i>();
   return 0;
}


По идее при разрешении перегрузки шаблон f<long*> должен быть исключен из списка подходящих функций, но MSVC, похоже, этого не делает

Расскажи подробнее — что есть, и чего хочется в конечном итоге. Может быть получится придумать обходное решение...
Любите книгу — источник знаний (с) М.Горький
Re[2]: перегрузка шаблонов функций в MSVC++
От: amyznikov  
Дата: 04.06.09 10:24
Оценка:
Здравствуйте, Bell, Вы писали:
B>Расскажи подробнее — что есть, и чего хочется в конечном итоге. Может быть получится придумать обходное решение...

В конечном итоге хочется до ума довести вот это : http://sourceforge.net/projects/mathexpression.
Тока не бейте сильно, там что-то типа пре-альфы, и я еще не все баг фиксы залил в git (а сколько еще не обнаружил!).
Я предполагаю затем объединить это с другой либой для решения систем нелинейных уравнений, так чтобы уравнения можно было вводить в ран-тайме без перекомпиляции.
Это без проблем компилится GCC и ICC на куче прлатформ, но хочется скормить самому передовому компилятору тоже (с претензией на кросс-платформенность).
Можно ли придумать что-нибудь приемлемое, так чтобы :
— не потерять производительности (впрочем у передового компилятора кажется с этим тоже не идеально)
— не заставлять пользователя писать уродские конструкции (см примеры в проекте)
— чтобы одни и те же кострукции работали на как можно большем числе компиляторов

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.