Сообщение Re[2]: char *(*(**foo[][8])())[]; - за сколько распарсите? от 06.05.2023 8:13
Изменено 06.05.2023 8:33 rg45
Re[2]: char *(*(**foo[][8])())[]; - за сколько распарсите?
Здравствуйте, Shmj, Вы писали:
S>"Всемогущий" GPT не осилил:
S>Вообще возможно ли это как-то инициализировать и вызвать?
Да что ж вы такие беспомощные
Ну ладно Chat GPT, ей простительно — она маленькая девочка. Но ты-то — лоб здоровый, которому выше уже все разжевали, осталось только проглотить — что не осилил опять?
http://coliru.stacked-crooked.com/a/ec19b1aaad28456c
S>"Всемогущий" GPT не осилил:
S>Вообще возможно ли это как-то инициализировать и вызвать?
Да что ж вы такие беспомощные
Ну ладно Chat GPT, ей простительно — она маленькая девочка. Но ты-то — лоб здоровый, которому выше уже все разжевали, осталось только проглотить — что не осилил опять?
http://coliru.stacked-crooked.com/a/ec19b1aaad28456c
#include <iostream>
const char* arr1[] = {"foo", "bar", "baz", nullptr}; // пример массива строк
const char* arr2[] = {"one", "two", "three", "four", nullptr}; // ещё один массив строк
// определение функций, возвращающих указатели на массивы строк
const char* (*func1())[] { return &arr1; }
const char* (*func2())[] { return &arr2; }
// определение указателей на функции
const char* (*(*fptr1)())[] = &func1;
const char* (*(*fptr2)())[] = &func2;
int main()
{
// Aнициализация foo - только не "с помощью двух элементов", а так, как это было в оригинальном варианте - массив произвольного размера
const char*(*(**foo[][8])())[] = {
{ &fptr1 }, // первый элемент указывает на функцию, возвращающую arr1
{ &fptr2 }, // второй элемент указывает на функцию, возвращающую arr2
{ &fptr1, &fptr2 }, // третий элемент указывает на две функции
{ &fptr1, &fptr2, &fptr1, &fptr2, &fptr1, &fptr2, &fptr1, &fptr2 }, // четвертый элемент тоже на что-то указывает
{ }, // пятый элемент - пустой (содержит восемь nullptr)
};
// Aнализ и использование foo
using String = const char*;
using ArrayOfString = String[];
using Function = ArrayOfString*();
for (Function** (&afpp)[8] : foo)
{
std::cout << "{ ";
for (Function** fpp : afpp)
{
if (fpp)
{
if (Function* fp = *fpp)
{
if (ArrayOfString* asptr = fp())
{
std::cout << "[ ";
for (const String* s = *asptr; *s; ++s)
{
std::cout << *s << ' ';
}
std::cout << "] ";
}
}
}
}
std::cout << "}" << std::endl;
}
}
g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
{ [ foo bar baz ] }
{ [ one two three four ] }
{ [ foo bar baz ] [ one two three four ] }
{ [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] }
{ }
Re[2]: char *(*(**foo[][8])())[]; - за сколько распарсите?
Здравствуйте, Shmj, Вы писали:
S>"Всемогущий" GPT не осилил:
S>Вообще возможно ли это как-то инициализировать и вызвать?
Да что ж вы такие беспомощные
Ну ладно Chat GPT, ей простительно — она маленькая девочка. Но ты-то — лоб здоровый, которому выше уже все разжевали — что не осилил опять?
http://coliru.stacked-crooked.com/a/ec19b1aaad28456c
S>"Всемогущий" GPT не осилил:
S>Вообще возможно ли это как-то инициализировать и вызвать?
Да что ж вы такие беспомощные
Ну ладно Chat GPT, ей простительно — она маленькая девочка. Но ты-то — лоб здоровый, которому выше уже все разжевали — что не осилил опять?
http://coliru.stacked-crooked.com/a/ec19b1aaad28456c
#include <iostream>
const char* arr1[] = {"foo", "bar", "baz", nullptr}; // пример массива строк
const char* arr2[] = {"one", "two", "three", "four", nullptr}; // ещё один массив строк
// определение функций, возвращающих указатели на массивы строк
const char* (*func1())[] { return &arr1; }
const char* (*func2())[] { return &arr2; }
// определение указателей на функции
const char* (*(*fptr1)())[] = &func1;
const char* (*(*fptr2)())[] = &func2;
int main()
{
// Aнициализация foo - только не "с помощью двух элементов", а так, как это было в оригинальном варианте - массив произвольного размера
const char*(*(**foo[][8])())[] = {
{ &fptr1 }, // первый элемент указывает на функцию, возвращающую arr1
{ &fptr2 }, // второй элемент указывает на функцию, возвращающую arr2
{ &fptr1, &fptr2 }, // третий элемент указывает на две функции
{ &fptr1, &fptr2, &fptr1, &fptr2, &fptr1, &fptr2, &fptr1, &fptr2 }, // четвертый элемент тоже на что-то указывает
{ }, // пятый элемент - пустой (содержит восемь nullptr)
};
// Aнализ и использование foo
using String = const char*;
using ArrayOfString = String[];
using Function = ArrayOfString*();
for (Function** (&afpp)[8] : foo)
{
std::cout << "{ ";
for (Function** fpp : afpp)
{
if (fpp)
{
if (Function* fp = *fpp)
{
if (ArrayOfString* asptr = fp())
{
std::cout << "[ ";
for (const String* s = *asptr; *s; ++s)
{
std::cout << *s << ' ';
}
std::cout << "] ";
}
}
}
}
std::cout << "}" << std::endl;
}
}
g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
{ [ foo bar baz ] }
{ [ one two three four ] }
{ [ foo bar baz ] [ one two three four ] }
{ [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] [ foo bar baz ] [ one two three four ] }
{ }