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

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

Например:

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

4

Решение

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

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

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

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

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]