Следующий пример назначенного инициализатора действителен в Visual Studio 2019 с /std:c++latest, но мне интересно, как выполнить то же самое без назначенных инициализаторов в Visual Studio 2017.
Я использую C++ и понимаю, что есть объектно-ориентированный способ сделать это, но я НЕ спрашиваю, как воссоздать это на C++ с помощью конструкторов. Это делает пометку для этого вопроса немного запутанной, извините за путаницу.
Я также борюсь с терминологией здесь. Просто чтобы подтвердить, является ли &(struct Foo)
составным литералом? И это достижение статической инициализации времени компиляции? Можно ли здесь как-то использовать constexpr
?
// Header
struct Foo
{
void (*Bar)();
};
extern struct Foo *FooAPI;
// Source
static void Bar()
{
}
static struct Foo *FooAPI = &(struct Foo) { // Error: Expecting an expression
.Bar = Bar
};
.Bar = Bar;
--›.Bar = Bar
. Также:void *(Bar)();
--›void (*Bar)();
- person dbush   schedule 08.01.2021