Предположим, что у меня есть класс, не подлежащий копированию, с несколькими конструкторами, такими как
class Foo: boost::noncopyable
{
public:
Foo(std::string s) {...}; // construct one way
Foo(int i) {...}; // construct another way
}
Теперь я хочу построить объект и выбрать, какой конструктор использовать во время выполнения:
Я мог бы сделать это с помощью указателей вроде: -
boost::shared_ptr<Foo> f;
if (condition)
f.reset(new Foo(myString));
else
f.reset(new Foo(myInteger));
// common code follows
f->doSomethingComplicated(...);
Но это кажется грязным и медленным. Есть ли простой способ выбрать конструктор для объекта, не прибегая к динамическому распределению?
Дополнительная информация: класс Foo
, приведенный выше, просто иллюстрирует проблему. Фактический класс - это Windows Gdiplus::Bitmap
- http://msdn.microsoft.com/ан-ГБ/library/окна/настольные/ms534420 (v = vs .85).aspx