Я хочу написать некоторую простую для вызова инициализацию объекта, и я хотел бы, чтобы эти объекты были shared_ptr MyClass.
Просто для наглядности представьте себе этот класс:
class MyClass
{
public:
MyClass(int number);
MyClass(wxString path);
}
int main()
{
//For now, objects are created in c style like this:
MyClass obj1("C:\\test");
MyClass * obj2 = new MyClass(5);
}
Теперь я хотел бы изменить это с помощью простой в использовании интеллектуальной инициализации указателя. Моя цель - что-то похожее на вызов конструктора, так что очень мало нужно изменить, чтобы обновить старый вызов новым:
Smart_MyClass obj1("C:\\test");
Smart_MyClass obj2(5);
//where Smart_MyClass is std::shared_ptr<MyClass>
Я мог бы решить это с помощью функции:
template<typename T>
inline Smart_MyClass Smart_MyClass_Fct(T t)
{
return std::make_shared<MyClass>(t);
};
Smart_MyClass obj = Smart_MyClass_Fct(7);
Как я могу перевести это в нужную мне форму? Я мог бы подумать об использовании оператора (), который потребовал бы структуру / класс и, возможно, наследование моего фактического класса? И, возможно, приведение его обратно в родительский класс? Уверен, что есть что-то более элегантное. ;-)