Проблема здесь, по-видимому, не в разрешении перегрузки , а на самом деле вычет параметра шаблона . Хотя превосходный ответ из @In silico разрешит проблему неоднозначной перегрузки в целом, кажется лучшим решением при работе с std::for_each
(или аналогичным) является явное указание его параметров шаблона:
// Simplified to use free functions instead of class members.
#include
#include
#include
void f( char c )
{
std::cout << c << std::endl;
}
void f( int i )
{
std::cout << i << std::endl;
}
void scan( std::string const& s )
{
// The problem:
// error C2914: 'std::for_each' : cannot deduce template argument as function argument is ambiguous
// std::for_each( s.begin(), s.end(), f );
// Excellent solution from @In silico (see other answer):
// Declare a pointer of the desired type; overload resolution occurs at time of assignment
void (*fpc)(char) = f;
std::for_each( s.begin(), s.end(), fpc );
void (*fpi)(int) = f;
std::for_each( s.begin(), s.end(), fpi );
// Explicit specification (first attempt):
// Specify template parameters to std::for_each
std::for_each< std::string::const_iterator, void(*)(char) >( s.begin(), s.end(), f );
std::for_each< std::string::const_iterator, void(*)(int) >( s.begin(), s.end(), f );
// Explicit specification (improved):
// Let the first template parameter be derived; specify only the function type
std::for_each< decltype( s.begin() ), void(*)(char) >( s.begin(), s.end(), f );
std::for_each< decltype( s.begin() ), void(*)(int) >( s.begin(), s.end(), f );
}
void main()
{
scan( "Test" );
}
Нашел решение этой проблемы после небольшой отладки.
Глядя на вывод терминала при переходе по ссылке, я заметил, что иногда он пытается отправить его через JS, за которым быстро следует HTML; другие, похоже, будут отправлены только через HTML.
Это указывало на расу между поведением по умолчанию и поведением в результате использования remote: true
.
Решением было вызвать e.preventDefault()
для обработчика щелчков элемента:
$('.my-element').click(function(e) { e.preventDefault(); })
Не идеально, и я предполагаю, что исправлено в более новых версиях Rails, хотя здесь есть небольшое закрытие:)