Именно так, вариадические шаблоны и совершенная пересылка через 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.
Кроме того, это только из памяти, поэтому тестирование не проводилось. Может содержать ошибочную ошибку.