Параметры конструктора типа шаблона - PullRequest
2 голосов
/ 24 сентября 2011

Учитывая шаблонный класс:

template<class T>
class Foo
{
public:
    void FunctionThatCreatesT()
    {
        _object = new T;
    }
private:
    shared_ptr<T> _object;
}

Можно ли каким-то образом передать набор параметров конструктора для T в Foo (возможно, при создании Foo), чтобы Foo мог использовать их при создании T?Подходит только решение на C ++ 11 (например, на столе есть вариады).

1 Ответ

3 голосов
/ 24 сентября 2011

Именно так, вариадические шаблоны и совершенная пересылка через std::forward.

#include <memory>
#include <utility>

template<class T>
class Foo
{
public:
    template<class... Args>
    void FunctionThatCreatesT(Args&&... args)
    {
        _object = new T(std::forward<Args>(args)...);
    }
private:
    std::shared_ptr<T> _object;
}

Список того, как это работает, см. Отличный ответ .

Вы можете эмулировать ограниченную версию этого в C ++ 03 со многими перегруженными функциями, но .. это PITA.

Кроме того, это только из памяти, поэтому тестирование не проводилось. Может содержать ошибочную ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...