Допустим, у меня есть некоторая произвольная осложненная перегруженная функция:Определения, которое перегружает было выбрано
template <class T> void foo(T&&);
template <class T> void foo(T*);
void foo(int);
Я хочу знать, для данного выражения, которогоfoo()
вызывается. Например, если некоторый макрос WHICH_OVERLOAD
:
using T = WHICH_OVERLOAD(foo, 0); // T is void(*)(int);
using U = WHICH_OVERLOAD(foo, "hello"); // U is void(*)(const char*);
// etc.
Я не знаю, где я хотел бы использовать такую вещь - я просто интересно, если это возможно.
Обратите внимание, что тип не достаточно отличить от перегрузки кстати. – Jarod42
Я не думаю, что это возможно. Это очень похоже на основные черты типа вызова библиотеки, и последнее, как известно, требует применения магии компилятора. –
@ T.C. Ах, да, вот что я подумал. [Этот] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3866.html)? – Barry