Re: видимо код нужен
От: The Passenger Голландия  
Дата: 29.08.13 08:15
Оценка:
Здравствуйте, The Passenger, Вы писали:

в случае студии и винды — GetInstance возвращает разные значения в случае библиотеки и исполняемого
gcc and linux — значение одинаково

код синглтонга


template <typename AType>
class Singleton
{
 public:

  static AType * GetInstance()
  {
    if (! fSingleton)
      {
    fSingleton = new AType;
      }
    return fSingleton;
  }

 private:
  static AType * fSingleton;
};

template <typename AType>
AType * Singleton<AType>::fSingleton = 0;


код библиотеки



void
BaseFilter::Print() const
{
  std::cout << "BaseFilter::Print" << std::endl;
}

void
BaseCode::RegisterFilter() const
{
  std::cout << "BaseCode::RegisterFilter, factory at ";
  std::cout << Singleton<Factory<MFilter> >::GetInstance();
  std::cout << std::endl;

  Singleton<Factory<MFilter> >::GetInstance()->Register<BaseFilter>("BaseFilter");
}

MFilter *
BaseCode::CreateFilter() const
{
  return Singleton<Factory<MFilter> >::GetInstance()->Create("BaseFilter");
}


код исполняемого




int main()
{
  // Running code from BaseLibrary.
  // This registers a filter of type BaseFilter at the singletoned factory.
  BaseCode b;
  b.RegisterFilter();
  MFilter * fb = b.CreateFilter();

  std::cout << std::endl;

  // Print the map
  Singleton<Factory<MFilter> >::GetInstance()->PrintMap();


  std::cout << std::endl << "main factory at ";
  std::cout << Singleton<Factory<MFilter> >::GetInstance();
  std::cout << std::endl;

  return 0;
}
Весь мир — Кремль, а люди в нем — агенты
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.