Здравствуйте, Посторонним В., Вы писали:
ПВ>Можно ли получить (во время компиляции) имя функции в виде строки?
ПВ>Макры вроде __FUNCTION__ и __function__ не годятся потому как для этого ф-ю надо вызывать.
Зависит от того, что именно надо, но вообще __FUNCTION__ можно использовать и не вызывая саму функцию.
Есть такой трюк:
template<void(*)(void*)>
void print_function_name()
{
std::cout << __FUNCSIG__ << std::endl;
}
int main()
{
print_function_name<free>();
}
У меня выводит:
void __cdecl print_function_name<void __cdecl free(void *)>(void)
Из чего можно выковырять имя целевой функции.
Здравствуйте, remark, Вы писали:
R>Здравствуйте, Посторонним В., Вы писали:
ПВ>>Можно ли получить (во время компиляции) имя функции в виде строки?
R>Есть такой трюк:
R>[...]
R>
R>Из чего можно выковырять имя целевой функции.
Спасибо! Работает для свободныз ф-й, а фот для членов класс не выходит
struct Iface
{
virtual void f1() = 0;
virtual void f2(int) = 0;
};
template <void (Iface::*)(void*)>
string getFunctionName()
{
string s = __FUNCSIG__;
return s;
}
int main()
{
std::cout << getFunctionName<Iface::f1>() << std::endl;
}
error C3867: 'Iface::f1': function call missing argument list; use '&Iface::f1' to create a pointer to member
ПВ>Спасибо! Работает для свободныз ф-й, а фот для членов класс не выходит
ПВ>ПВ>struct Iface
ПВ>{
ПВ> virtual void f1() = 0;
ПВ> virtual void f2(int) = 0;
ПВ>};
ПВ>template <void (Iface::*)(void*)>
ПВ>string getFunctionName()
ПВ>{
ПВ> string s = __FUNCSIG__;
ПВ> return s;
ПВ>}
ПВ>int main()
ПВ>{
ПВ>std::cout << getFunctionName<&Iface::f1>() << std::endl; // нужен &
ПВ>}
ПВ>
class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getFunctionName<void __t
hiscall Iface::`vcall'{0}'(void)>(void)
Здравствуйте, tlamer, Вы писали:
ПВ>>Спасибо! Работает для свободных ф-й, а вот для членов класса не выходит
ПВ>>ПВ>>struct Iface
ПВ>>{
ПВ>> virtual void f1() = 0;
ПВ>> virtual void f2(int) = 0;
ПВ>>};
ПВ>>template <void (Iface::*)(void*)>
ПВ>>string getFunctionName()
ПВ>>{
ПВ>> string s = __FUNCSIG__;
ПВ>> return s;
ПВ>>}
ПВ>>int main()
ПВ>>{
ПВ>>std::cout << getFunctionName<&Iface::f1>() << std::endl; // нужен &
ПВ>>}
ПВ>>
T>class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getFunctionName<void __t
T>hiscall Iface::`vcall'{0}'(void)>(void)
И "f1" блин потерялось
Здравствуйте, Посторонним В., Вы писали:
ПВ>Спасибо! Работает для свободныз ф-й, а фот для членов класс не выходит
Тебе компилятор подсказывает, как правильно:
ПВ>ПВ>std::cout << getFunctionName<&Iface::f1>() << std::endl;
// ^
ПВ>
ПВ>ПВ>error C3867: 'Iface::f1': function call missing argument list; use '&Iface::f1' to create a pointer to member
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>