Рассмотрим следующий код:
struct f{
void get(int a) {}
};
struct g1{
template <typename Arg>
void get(Arg a) {}
};
struct g2{
template <typename... Args>
void get(Args... args) {}
};
int f2()
{
std::bind(&f::get,f(),2); // (A)
std::bind(&g1::get<int>,g1(),2); // (B) redundant type specifier !
//std::bind(&g1::get,g1(),2); // compiler error !
std::bind(&g2::get<int, double>,g2(),2,1.1); // (C) redundant type specifiers !
//std::bind(&g2::get,g2(),2,1.1); // compiler error !
return 0;
}
Можно ли избавиться от избыточных параметров шаблона в случае (B) и (C)?Я ожидал бы, что std :: bind автоматически выведет типы из своих параметров.
Я подумал, может быть, написать оболочку с переменными аргументами шаблона и с использованием decltype можно было бы скрыть эти избыточные спецификации типов.
Примечание: я использую gcc 4.4