Я пытаюсь передать перегруженный указатель функции, как показано ниже в примере кода.C++ перегруженная функция указатель двусмысленность
class Sample
{
uint32_t method(char* input1, double input2);
uint32_t method(double input1);
}
template<class T, class... Args)
void processInput(T &&t, Args&&... a)
{
std::packaged_task<uint32_t(Args...)> task(std::bind(t, a...));
// other processing
}
// Caller invokes the below API
Sample* obj = new Sample();
processInput(static_cast<uint32_t(*)(double)>(&Sample::method), &*obj, 2.0f);
Но этот код не компилируется. Он продолжает жаловаться, что не может определить, какой экземпляр перегруженной функции предназначен. Я говорил несколько примеров:
http://en.cppreference.com/w/cpp/language/static_cast
Может кто-нибудь помочь в указании на то, что происходит здесь не так?
Shoudln't 'static_cast <двойной (*) (дважды)>' 'быть static_cast' как он является функцией членом? –
NathanOliver
@pree Исправить ваши опечатки (отсутствует ';', ')' вместо '>'). Функция также не возвращает 'double'. – LogicStuff
Вот и все! Я действительно не понимал реализацию static_cast при перегрузке функций и делал это неправильно! Спасибо @NathanOliver & LogicStuff. – pree