есть ли способ сделать такое?
void main()
{
decltype(__FUNCTION__) this_function;
// ...
}
поясню: хочется чтобы первая строка функции была decltype(main) this_function, но без упоминания названия функции.
__FUNCTION__ определено как название функции в виде строкового литерала.
спасибо
Здравствуйте, Muxa, Вы писали:
Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип
Что-то в этом духе сделано здесь:
https://github.com/adambadura/type_name
Здравствуйте, _NN_, Вы писали:
_NN>Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип
_NN>Что-то в этом духе сделано здесь: https://github.com/adambadura/type_name
Ты предлагаешь ему способ получения строкового представления имени типа, тогда как ему нужен реальный тип, который можно будет использоваль для объявления переменных, например.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, _NN_, Вы писали:
_NN>>Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип
_NN>>Что-то в этом духе сделано здесь: https://github.com/adambadura/type_name
R>Ты предлагаешь ему способ получения строкового представления имени типа, тогда как ему нужен реальный тип, который можно будет использоваль для объявления переменных, например.
Получить строку с сигнатурой и распарсить в тип. Правда будет работать только для известных типов
Насколько я понимаю в макросе нельзя убрать кавычки, а так бы можно было заюзать __FUNCTION__.
Здравствуйте, Muxa, Вы писали:
M>есть ли способ сделать такое?
M>void main()
M>{
M> decltype(__FUNCTION__) this_function;
M> // ...
M>}
M>
M>поясню: хочется чтобы первая строка функции была decltype(main) this_function, но без упоминания названия функции.
M>__FUNCTION__ определено как название функции в виде строкового литерала.
Только вручную: объявляйте тип функции в её начале и пользуйте в недрах
template<class T>
struct A { typedef A THIS_CLASS;
static void foo() { typedef void (*FUNCTION)();
FUNCTION this_function;
}
void foo(T) { typedef void (THIS_CLASS::*FUNCTION)(T);
FUNCTION this_function;
}
void foo(char*) const { typedef void (THIS_CLASS::*FUNCTION)(char*) const;
FUNCTION this_function;
}
};