Tôi muốn triển khai trình theo dõi chức năng, sẽ theo dõi lượng thời gian mà một hàm đang thực hiện. Tôi có lớp học sau cho cùng một: -Có cách nào để lấy tên hàm bên trong hàm C++ không?
class FuncTracer
{
public:
FuncTracer(LPCTSTR strFuncName_in)
{
m_strFuncName[0] = _T('\0');
if(strFuncName_in ||
_T('\0') != strFuncName_in[0])
{
_tcscpy(m_strFuncName,strFuncName_in);
TCHAR strLog[MAX_PATH];
_stprintf(strLog,_T("Entering Func:- <%s>"),m_strFuncName);
LOG(strLog)
m_dwEnterTime = GetTickCount();
}
}
~FuncTracer()
{
TCHAR strLog[MAX_PATH];
_stprintf(strLog,_T("Leaving Func:- <%s>, Time inside the func <%d> ms"),m_strFuncName, GetTickCount()-m_dwEnterTime);
LOG(strLog)
}
private:
TCHAR m_strFuncName[MAX_PATH];
DWORD m_dwEnterTime;
};
void TestClass::TestFunction()
{
// I want to avoid writing the function name maually..
// Is there any macro (__LINE__)or some other way to
// get the function name inside a function ??
FuncTracer(_T("TestClass::TestFunction"));
/*
* Rest of the function code.
*/
}
Tôi muốn biết có cách nào để lấy tên hàm từ bên trong một hàm không? Về cơ bản tôi muốn người dùng của lớp của tôi chỉ đơn giản là tạo một đối tượng giống nhau. Họ có thể không vượt qua tên hàm.
Hoạt động của nó trong VS2003 nhưng không hoạt động ở VC6 – Canopus
Điều gì không hoạt động? Các macro không được trình biên dịch nhận ra hay gì? – sharptooth
Có. Khi biên dịch trong VC6, nó cho biết __FUNCTION__ là mã định danh không khai báo. Tôi có thiếu cái gì đó hay nó không được hỗ trợ? – Canopus