我已将宏定义如下:
#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...);
}
答案 0 :(得分:2)
您可以添加其他宏#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);
};
答案 1 :(得分:-1)
由于__FUNCTION
__的类型为static&#34; const char __FUNCTION
__ []&#34; ,当你调用m_pTimeMeasurement-&gt; addTimeEntry(_name
_)时,addTimeEntry函数参数将是&#34; const char __FUNCTION__
[]&#34;。
所以你可以连接两个char变量并传递它
ADD_TIME_ENTRY(strcat(const_cast&lt; char *&gt;(__FUNCTION
__),&#34; _start"));
ADD_TIME_ENTRY(strcat(const_cast<char *>(
__ FUNCTION __),"
_ stop&#34;));