Привет!
Собственно, вот чего хочу:
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++. Прикладные вопросы' — Кодт
Здравствуйте, 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, похоже, этого не делает
Расскажи подробнее — что есть, и чего хочется в конечном итоге. Может быть получится придумать обходное решение...
Здравствуйте, Bell, Вы писали:
B>Расскажи подробнее — что есть, и чего хочется в конечном итоге. Может быть получится придумать обходное решение...
В конечном итоге хочется до ума довести вот это :
http://sourceforge.net/projects/mathexpression.
Тока не бейте сильно, там что-то типа пре-альфы, и я еще не все баг фиксы залил в git (а сколько еще не обнаружил!).
Я предполагаю затем объединить это с другой либой для решения систем нелинейных уравнений, так чтобы уравнения можно было вводить в ран-тайме без перекомпиляции.
Это без проблем компилится GCC и ICC на куче прлатформ, но хочется скормить самому передовому компилятору тоже (с претензией на кросс-платформенность).
Можно ли придумать что-нибудь приемлемое, так чтобы :
— не потерять производительности (впрочем у передового компилятора кажется с этим тоже не идеально)
— не заставлять пользователя писать уродские конструкции (см примеры в проекте)
— чтобы одни и те же кострукции работали на как можно большем числе компиляторов
Спасибо!