[[
wikihub
]]
Search
⌘K
Explore
People
For Agents
Sign in
Explore
People
For Agents
Sign in
@jemoka / Jemoka Knowledge Base / wiki/concepts/generic.md
Suggest edit
Cancel
Submit suggestion
Title
Name
Note
--- title: "generics" type: concept related: [Casting, Generic] source: https://www.jemoka.com/posts/kbhgeneric/ confidence: high status: active --- We don’t want to write the same thing many times; generics minimizes code duplication. Therefore, generics! Let’s implement a simple swap function: void swap_ptr_values(void *data1ptr, void *data2ptr, size_t datasize) { } helper functions memcpy Copy datasize bytes worth of memory in the second argument into the first argument. The two arguments CANNOT OVERLAP otherwise, you risk UB. void *memcpy(void *dest, void *src, size_t nbytes) memmove Its memcpy, but it works with overlapping data, and is slower. void *memove(void *dest, void *src, size_t nbytes) pointer arithmetic with generics Unfortunately, given that we don’t know how big a void * pointer is, we can’t do pointer arithmetic against it because it still doesn’t know how big the pointer is. You can’t just add/subtract numbers to char *. So, we actually have to do pointer arithmetic by casting the pointer to a char* which will make pointer arithmetic work at the one-byte level. void *return_sixth_elem(void *arr) { return (char *)arr + 5; } higher order functions We can pass a function as a parameter. bool (*function_name)(int, int)