Обнаружен параметр ASP.NET, который не применяется в режиме интегрированного управляемого конвейера

Традиционная альтернатива - использовать vector указателей, как уже отмечалось.

Для тех, кто ценит, Boost поставляется с очень интересной библиотекой: Pointer Containers, которая отлично подходит для задание и освобождает вас от различных проблем, связанных с указателями:

  • управление жизненным циклом
  • двойное разыменование итераторов

Обратите внимание, что это значительно лучше, чем vector интеллектуальных указателей, как с точки зрения производительности, так и интерфейса.

Теперь существует 3-я альтернатива, которая заключается в изменении вашей иерархии. Для лучшей изоляции пользователя я несколько раз использовал следующий шаблон:

class IClass;

class MyClass
{
public:
  typedef enum { Var1, Var2 } Type;

  explicit MyClass(Type type);

  int foo();
  int bar();

private:
  IClass* m_impl;
};

struct IClass
{
  virtual ~IClass();

  virtual int foo();
  virtual int bar();
};

class MyClass1: public IClass { .. };
class MyClass2: public IClass { .. };

Это довольно просто, а вариация Pimpl идиомы, обогащенная шаблоном Strategy .

Это работает, конечно, только в том случае, если вы не хотите напрямую манипулировать «истинными» объектами и вовлекаете глубокую копию. Возможно, это не так, как вы пожелаете.

382
задан Ian Kemp 16 May 2013 в 10:07
поделиться