У меня есть Visual Studio 2008 C++ приложение, где мне нужно получить информацию от функции, которая берет буфер с переменным размером. Итак, у меня есть класс, который поддерживает этот тип с std::vector
и реализует оператор преобразования для типа, который я хочу.Использование оператора преобразования типов
class CMibIpForwardTable
{
public:
operator MIB_IPFORWARDTABLE*()
{
return reinterpret_cast< MIB_IPFORWARDTABLE* >(&buffer_.front());
}
ULONG size() const
{
return buffer_.size();
}
void resize(ULONG size)
{
buffer_.resize(size);
}
private:
std::vector<BYTE> buffer_;
};
CMibIpForwardTable Get(DWORD* error_code = NULL)
{
CMibIpForwardTable table;
ULONG size = 0;
DWORD ec = ::GetIpForwardTable(NULL, &size, FALSE);
if(ec == ERROR_INSUFFICIENT_BUFFER)
{
table.resize(size);
ec = ::GetIpForwardTable(table, &size, TRUE);
}
if(NULL != error_code && ec != 0)
*error_code = ec;
return table;
}
Я хотел бы иметь возможность использовать его как это:
CMibIpForwardTable table = Get();
// error: 'dwNumEntries' : is not a member of 'CMibIpForwardTable'
DWORD entries = table->dwNumEntries;
Есть хороший способ получить доступ к основному типу MIB_IPFORWARDTABLE
? Или я застрял делать что-то вроде этого:
MIB_IPFORWARDTABLE* t = table;
DWORD entries = t->dwNumEntries;
Спасибо, PaulH