Для нормальной функции C ++ возможно, чтобы параметры шаблона не появлялись в списке аргументов:
template<typename T>
T default_construct()
{
return T();
}
и назовите это с
some_type x = default_construct<some_type>();
Хотя тип, который я использую, отсутствует в списке аргументов, я все равно могу передать его функции. Теперь я хочу сделать это в конструкторе класса:
struct Base;
template<typename T>
Base* allocate()
{
return new T; //Assume T derives from Base...
}
struct factory {
template<typename T>
factory()
: func(allocate<T>)
{}
std::tr1::function<Base*()> func;
};
но я не могу найти способ передать параметр конструктору, когда я хочу создать экземпляр factory
.
Есть ли способ сделать это без превращения класса в шаблонный класс или отправки неиспользуемого T
объекта в конструктор?