Можно ли построить std::function
с конструктором типа, определенного аргументом шаблона?
Например:
template <typename T>
bool registerType()
{
const std::function<T()> func = &T::T; //I know this doesn't work
//...
}
Можно ли построить 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
, но, возможно, с другими побочными эффектами. В случае истинного вызова функции в операторе возврата есть дополнительное временное значение, которое номинально копируется/перемещается в возвращаемое значение. Реализация может исключать или не исключать дополнительное временное значение.