Можно ли построить std::function
с конструктором типа, определенного аргументом шаблона?
Например:
template <typename T>
bool registerType()
{
const std::function<T()> func = &T::T; //I know this doesn't work
//...
}
Я так не думаю, потому что конструкторы не имеют имен, вы не можете взять указатель / ссылку на них, и в целом они не ведут себя совсем как функции.
Вы можете использовать лямбду для инициализации std::function
с той же подписью:
const std::function<T()> func = [](void) { return T(); } // or something like that
Вызов его приводит к тому же результату, что и выражение T()
построить временный тип T
, но возможно с разными побочными эффектами. В случае истинного вызова функции в операторе return есть дополнительный временный объект, который номинально копируется / перемещается в возвращаемое значение. Реализация может или не может исключить дополнительные временные.
Других решений пока нет …