Сохранение полного вызова функции для последующего воспроизведения? - PullRequest
1 голос
/ 25 апреля 2011

В данный момент я сохраняю вызов функции через функцию MyClass :: Enable , которую я представил ниже. Это универсально в том смысле, что позже я могу воспроизвести функцию в потоке потребителя, пройдя по commanList и не предоставляя никаких аргументов функции.

Однако, благодаря быстрой проверке производительности, этот метод занимает в 2 раза больше времени на обработку сохраненной функции по сравнению с использованием таблицы поиска функций (которая разделяет общую часть) и хранит аргументы функции, а также позицию поиска функции. (извиняюсь, если это не имеет смысла: по сути это функция записи).

Существует ли более удобная для исполнения версия std :: tr1 :: bind [boost :: bind], или есть лучший способ записи вызова функции в общем виде и последующего ее воспроизведения?

class CVertexFormatGLPtr
{
   void Enable(size_t a, size_t b);
   void Disable();
};

class MyClass
{
public:
   typedef std::function<void ()> command;
   typedef std::list<command> commandList;

   // This is a typedef of CVertexFormatPtr & CVertexFormatGLPtr
   VertexFormatMap& m_vertexFormats;

   void Enable(const CVertexFormatPtr& pVFormat, size_t a, size_t b)
   {
      // search to find if vertex buffer is active
      auto itor = m_vertexFormats.find(pVFormat);
      CVertexFormatGLPtr pVFormatGL = CVertexFormatGLPtr();
      if ( itor != m_vertexFormats.end() )
      {
         pVFormatGL = (*itor).second;
      }

      std::function<void()> zeroArg = std::bind(&CVertexFormatGL::Enable, pVFormatGL, a, b);
      m_renderCommands.push_back(zeroArg); 
   }

};
...