Сообщение Re[8]: имя переменной в компайл-тайм от 16.03.2018 14:17
Изменено 16.03.2018 15:09 Маркуша Шулин
R>Здравствуйте, YuriV, Вы писали:
YV>>CTTI именно компайлтайм в отличии от стандартного typeinfo. А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет.
R>Кстати, я вот этот момент несколько недогоняю. С одной стороны, такие макросы как __PRETTY_FUNCTION__ и __FUNCSIG__, хоть и являются нестандартными расширениями, тем не менее, это макросы препроцессора. С другой стороны, эти макросы определены только для тех шаблонных функций, которые прошли через инстанцирование, которое, как известно, выполняется на этапе компиляции (точнее говоря, в восьмой фазе трансляции, в ходе которой образуются т.н. instantiation units. Но так или иначе, это уже фаза, следующая после препроцессора). Вот и выходит, что это макросы, значение которых становится известным после/во время компиляции. Как так? Уж не по той ли причине их не торопятся вносить в стандарт, что их невозможно реализовать без размывания концепции?
Ах, в данном случае мне кажется удобство главное. Пока удобно и обеспечивает обратную совместимость, все гуд. Т.к. это напрямую деньги, так что появление этих сущнoстей (что на самом деле не совсем макрос т.к. лайфтайм у них не только на этапе работы препроцессора, как я понимаю.) в стандарте не столь важно. А вот их пропадание скорее всего маловероятно.
Куда более интересный вопрос .. апдейт по SG7
недавно приходило на группу :
там и последнее ишью по компайлтайм рефлекшину на базе CLang ну и метаклассы Саттера и что-то Страуструпаust as a heads up for those here in Jacksonville...
Our evening session tonight (2018-03-14) will actually cover *all* the reflection material this week. Unless we run out of time with substantial unfinished work, we will avoid the Friday evening session.
The discussion will focus on, in order:
http://wg21.link/p0953 — constexpr reflexpr
http://wg21.link/p0954 — what do we want to do with reflection?
http://wg21.link/p0707 — metaclasses (just a brief update)
We will also briefly discuss a plan for offline feedback for p0957.
There are also late papers on implementation experience attached to the wiki (p0992, p0993). While we won't explicitly cover them as they arrived during the week and talking to folks I don't think people have had time to dig into them at all. But I want to draw folks' attention to this.
Вообще я по этим темам использую сложившуюся уже практику (как по мне) отдельеного описания метаинформации для классов, все никак не собирусь выкласть что-то сюда.
выглядит примерно так
struct mystruct
{
int f0_;
std::string f1_;
int foo(int a0, int a1, std::string const& a2);
};
METACLASS(mystruct, f0_, f1_, foo);
int main() {
myserializer() << mystruct { 0, "1" };
auto r = cast<int>(callbyname(mystruct{0, "1"}, "foo", 1, 2, "3"));
} Так вот для такой практики, чтобы полностью удовлетворить рефлекшин ишью, надо знать имена аргументов если филды еще обработать препроцессором можно
, то с аргументами все сложнее и некрасивеею Потому мне тема показалась интересной.
R>Здравствуйте, YuriV, Вы писали:
YV>>CTTI именно компайлтайм в отличии от стандартного typeinfo. А то, что в прагме не работает так это проблемы прагма месседж скорее, ведь стандарта на эти макросы нет.
R>Кстати, я вот этот момент несколько недогоняю. С одной стороны, такие макросы как __PRETTY_FUNCTION__ и __FUNCSIG__, хоть и являются нестандартными расширениями, тем не менее, это макросы препроцессора. С другой стороны, эти макросы определены только для тех шаблонных функций, которые прошли через инстанцирование, которое, как известно, выполняется на этапе компиляции (точнее говоря, в восьмой фазе трансляции, в ходе которой образуются т.н. instantiation units. Но так или иначе, это уже фаза, следующая после препроцессора). Вот и выходит, что это макросы, значение которых становится известным после/во время компиляции. Как так? Уж не по той ли причине их не торопятся вносить в стандарт, что их невозможно реализовать без размывания концепции?
Ах, в данном случае мне кажется удобство главное. Пока удобно и обеспечивает обратную совместимость, все гуд. Т.к. это напрямую деньги, так что появление этих сущнoстей (что на самом деле не совсем макрос т.к. лайфтайм у них не только на этапе работы препроцессора, как я понимаю.) в стандарте не столь важно. А вот их пропадание скорее всего маловероятно.
Куда более интересный вопрос .. апдейт по SG7
недавно приходило на группу :
там и последнее ишью по компайлтайм рефлекшину на базе CLang ну и метаклассы Саттера и что-то Страуструпаust as a heads up for those here in Jacksonville...
Our evening session tonight (2018-03-14) will actually cover *all* the reflection material this week. Unless we run out of time with substantial unfinished work, we will avoid the Friday evening session.
The discussion will focus on, in order:
http://wg21.link/p0953 — constexpr reflexpr
http://wg21.link/p0954 — what do we want to do with reflection?
http://wg21.link/p0707 — metaclasses (just a brief update)
We will also briefly discuss a plan for offline feedback for p0957.
There are also late papers on implementation experience attached to the wiki (p0992, p0993). While we won't explicitly cover them as they arrived during the week and talking to folks I don't think people have had time to dig into them at all. But I want to draw folks' attention to this.
Вообще я по этим темам использую сложившуюся уже практику (как по мне) отдельеного описания метаинформации для классов, все никак не собирусь выкласть что-то сюда.
выглядит примерно так
struct mystruct
{
int f0_;
std::string f1_;
int foo(int a0, int a1, std::string const& a2);
};
METACLASS(mystruct, f0_, f1_, foo);
int main() {
myserializer() << mystruct { 0, "1" };
auto r = cast<int>(callbyname(mystruct{0, "1"}, "foo", 1, 2, "3"));
static_assert(metaclass_find_func<mystruct, foo_tag>::value, "Func not found.");
int r = call_by_tag<foo_tag>(mystruct{0, "1"}, 1, 2, "3");
//This a problem
make_json_call<foo_tag>(mystruct{0, "1"}, 1, 2, "3");
} Так вот для такой практики, чтобы полностью удовлетворить рефлекшин ишью, надо знать имена аргументов если филды еще обработать препроцессором можно
, то с аргументами все сложнее и некрасивеею Потому мне тема показалась интересной.