附加 __FUNCTION__ 宏提供的字符串
Append the string provided by __FUNCTION__ macro
我定义了一个宏如下:
#define ADD_TIME_ENTRY(_name_) m_pTimeMeasurement->addTimeEntry(_name_);
现在,我想通过 ADD_TIME_ENTRY()
将函数名称传递到我放置 ADD_TIME_ENTRY()
的任何函数中
ADD_TIME_ENTRY(__FUNCTION__)
对我来说工作正常,但现在,我想在函数名称的末尾添加“_start”或“_stop”。我的意思是,我需要 "imageFunction()_start"
之类的东西,但我做不到。
我想在一行中完成,即
imageFunction()
{
ADD_TIME_ENTRY(__FUNCTION__ ....something here...);
}
您可以添加一个额外的宏 #define STRINGIZE(str) #str
并像这样使用它:ADD_TIME_ENTRY(__FUNCTION__ STRINGIZE(start))
似乎 __FUNCTION__
可能不是一个宏,所以在这种情况下将它与任何东西结合起来并不是特别容易。在 MSVC2013 中,它是一个宏,因此很容易组合。对于其他编译器,我会尝试以下操作:
#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)
不是特别有效,但工作方式。
示例:
#include <iostream>
#include <string>
using namespace std;
#define STRINGIZE(str) #str
#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)
int main()
{
std::cout << GIVE_ME_NAME(start);
};
由于 __FUNCTION
__ 是静态类型 "const char __FUNCTION
__[]" ,当您调用 m_pTimeMeasurement->addTimeEntry(_name
_) 时,addTimeEntry 函数参数将为 "const char __FUNCTION__
[]".
所以你可以连接两个char变量并传递它
ADD_TIME_ENTRY(strcat(const_cast< char *>(__FUNCTION
__),"_start"));
ADD_TIME_ENTRY(strcat(const_cast<char *>(
__FUNCTION__),"
_stop") );
我定义了一个宏如下:
#define ADD_TIME_ENTRY(_name_) m_pTimeMeasurement->addTimeEntry(_name_);
现在,我想通过 ADD_TIME_ENTRY()
将函数名称传递到我放置 ADD_TIME_ENTRY()
ADD_TIME_ENTRY(__FUNCTION__)
对我来说工作正常,但现在,我想在函数名称的末尾添加“_start”或“_stop”。我的意思是,我需要 "imageFunction()_start"
之类的东西,但我做不到。
我想在一行中完成,即
imageFunction()
{
ADD_TIME_ENTRY(__FUNCTION__ ....something here...);
}
您可以添加一个额外的宏 #define STRINGIZE(str) #str
并像这样使用它:ADD_TIME_ENTRY(__FUNCTION__ STRINGIZE(start))
似乎 __FUNCTION__
可能不是一个宏,所以在这种情况下将它与任何东西结合起来并不是特别容易。在 MSVC2013 中,它是一个宏,因此很容易组合。对于其他编译器,我会尝试以下操作:
#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)
不是特别有效,但工作方式。
示例:
#include <iostream>
#include <string>
using namespace std;
#define STRINGIZE(str) #str
#define GIVE_ME_NAME(tag) std::string(__FUNCTION__) + STRINGIZE(tag)
int main()
{
std::cout << GIVE_ME_NAME(start);
};
由于 __FUNCTION
__ 是静态类型 "const char __FUNCTION
__[]" ,当您调用 m_pTimeMeasurement->addTimeEntry(_name
_) 时,addTimeEntry 函数参数将为 "const char __FUNCTION__
[]".
所以你可以连接两个char变量并传递它
ADD_TIME_ENTRY(strcat(const_cast< char *>(__FUNCTION
__),"_start"));
ADD_TIME_ENTRY(strcat(const_cast<char *>(
__FUNCTION__),"
_stop") );