получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?
Каким образом происходит передача информации в [mainx] что функция printx() существует?
objdump -dr mainx.o
...
0000000000000000 <main>:
0: 55 push %rbp
...
3a: 89 c7 mov %eax,%edi
3c: e8 00 00 00 00 callq 41 <main+0x41>
3d: R_X86_64_PLT32 _Z6printxi-0x4
41: b8 00 00 00 00 mov $0x0,%eax
46: c9 leaveq
47: c3 retq
...
readelf -a mainx.o
...
Relocation section '.rela.text' at offset 0x580 contains 12 entries:
Offset Info Type Sym. Value Sym. Name + Addend
...
00000000003d 001400000004 R_X86_64_PLT32 0000000000000000 _Z6printxi - 4
...
Symbol table '.symtab' contains 25 entries:
Num: Value Size Type Bind Vis Ndx Name
...
20: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _Z6printxi
...
readelf -a printx.cpp
...
Symbol table '.symtab' contains 24 entries:
Num: Value Size Type Bind Vis Ndx Name
...
14: 0000000000000000 75 FUNC GLOBAL DEFAULT 1 _Z6printxi
...
Rest::function(char * function_name, int (App::* f)(String), App& object)
// вместо App можно какой-то интерфейс, который App реализует
…
object.*f("string");
...
bt_rest.function("", &App::startManufacturing, *this);
class App {
static int startManufacturing(String command)
};
Rest::function(char * function_name, int (*f)(String, void*), void*);
void doStartManufacturing(String command, void* closure) {
reinterpret_cast<App*>(closure)->startManufacturing(command);
}
...
bt_rest.function("startManufacturing", doStartManufacturing, this);
App app;
int doStartManufacturing(String command) { return app.startManufacturing(command); }
...
bt_rest.function("startManufacturing", doStartManufacturing);
демонстрация мокапов, очень много изображений которые очень высокого разрешения для ретины
var life = {
day: 0,
up() {
this.day++;
return this;
},
down() {
this.day--;
return this;
},
}
life.up().up()
console.log(life.day) //2
Object.values(obj).some(value => !value);
(Object.values(obj).filter(value => !value)).length
var result = array.reduce((previous, current) => {
if (previous.hasOwnProperty(current)) {
previous[current]++;
} else {
previous[current] = 1;
}
return previous;
}, {});