Создайте std::function с помощью конструктора на основе шаблона

Можно ли построить std::function с конструктором типа, определенного аргументом шаблона?

Например:

template <typename T>
bool registerType()
{
    const std::function<T()> func = &T::T; //I know this doesn't work
    //...
}

person Graeme    schedule 12.09.2012    source источник


Ответы (1)


Я так не думаю, потому что у конструкторов нет имен, вы не можете взять на них указатель/ссылку, и в целом они ведут себя не совсем как функции.

Вы можете использовать лямбду для инициализации std::function с той же подписью:

const std::function<T()> func = [](void) { return T(); } // or something like that

Его вызов дает тот же результат, что и использование выражения T() для создания временного объекта типа T, но, возможно, с другими побочными эффектами. В случае истинного вызова функции в операторе возврата есть дополнительное временное значение, которое номинально копируется/перемещается в возвращаемое значение. Реализация может исключать или не исключать дополнительное временное значение.

person Steve Jessop    schedule 12.09.2012