decltype от текущей функции
От: Muxa  
Дата: 19.06.19 09:56
Оценка:
есть ли способ сделать такое?
void main()
{
    decltype(__FUNCTION__) this_function;
    // ...
}

поясню: хочется чтобы первая строка функции была decltype(main) this_function, но без упоминания названия функции.
__FUNCTION__ определено как название функции в виде строкового литерала.

спасибо
Отредактировано 19.06.2019 10:53 Muxa . Предыдущая версия .
Re: decltype от текущей функции
От: _NN_ www.nemerleweb.com
Дата: 02.07.19 21:17
Оценка:
Здравствуйте, Muxa, Вы писали:

Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип
Что-то в этом духе сделано здесь: https://github.com/adambadura/type_name
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: decltype от текущей функции
От: rg45 СССР  
Дата: 04.07.19 14:12
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип

_NN>Что-то в этом духе сделано здесь: https://github.com/adambadura/type_name

Ты предлагаешь ему способ получения строкового представления имени типа, тогда как ему нужен реальный тип, который можно будет использоваль для объявления переменных, например.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: decltype от текущей функции
От: _NN_ www.nemerleweb.com
Дата: 05.07.19 15:52
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, _NN_, Вы писали:


_NN>>Как вариант распарсить __FUNCSIG__ или __PRETTY_FUNCTION__ через constexpr функцию и выдать нужный тип

_NN>>Что-то в этом духе сделано здесь: https://github.com/adambadura/type_name

R>Ты предлагаешь ему способ получения строкового представления имени типа, тогда как ему нужен реальный тип, который можно будет использоваль для объявления переменных, например.

Получить строку с сигнатурой и распарсить в тип. Правда будет работать только для известных типов

Насколько я понимаю в макросе нельзя убрать кавычки, а так бы можно было заюзать __FUNCTION__.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: decltype от текущей функции
От: kov_serg Россия  
Дата: 05.07.19 18:54
Оценка:
Здравствуйте, 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;
    }
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.