Этот вопрос в шаблоне генератора объектов заставил меня задуматься о способах автоматизации.
По сути, я хочу автоматизировать создание таких функций, как std :: make_pair
, std :: bind1st
и std :: mem_fun
, чтобы вместо того, чтобы писать разные функции для каждого типа класса шаблона, вы могли написать одну функцию шаблона с вариативным шаблоном, которая обрабатывает все случаи сразу. Использование этой функции выглядит так:
make(1, 2); // equivalent to std::make_pair(1, 2)
make(&foo, 3); // equivalent to std::bind2nd(&foo, 3);
Можно ли написать эту функцию make
? Я пробовал это, но это не работает в GCC 4.5 или 4.6:
template class TemplateClass, typename... Args>
TemplateClass make(Args&&... args)
{
return TemplateClass(std::forward(args)...);
}
Если я попытаюсь вызвать (например) make
, я просто получу
error: no matching function for call to 'make(int, int)'
Я где-нибудь ошибся синтаксисом?
Или это правильно, а GCC - нет?
Или это в C ++ 0x принципиально невозможно?
[править]
Предложение N2555 , кажется, предполагает, что это разрешено, и GCC утверждает, что реализовал это в GCC4.4 .