В данный момент я сохраняю вызов функции через функцию 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);
}
};