Tenho uma matriz de ponteiros de função e quero atribuir funções fictícias simples.
A primeira coisa que me veio à mente foi usar lambda. Funcionou muito bem. A única coisa que me surpreendeu foi o fato de que obtenho endereços de ponteiro diferentes quando os atribuo um por um, mas obtenho endereços idênticos quando faço isso em um loop.
#include <iostream>
int main()
{
int (*ptrArr[6])(void);
int size = sizeof(ptrArr)/sizeof(void*);
// results in three different pointer addresses
ptrArr[0] = [](){return 0;};
ptrArr[1] = [](){return 0;};
ptrArr[2] = [](){return 0;};
// results in three identical pointer addresses
for(int i = 3; i < size; i++)
{
ptrArr[i] = [](){return 0;};
}
for(int i = 0; i < 6; i++)
{
std::cout << (void*)ptrArr[i] << std::endl;
}
return 0;
}
Saída:
00E9F810
00E9F840
00E9F870
00E9F8A0
00E9F8A0
00E9F8A0
Existe uma maneira de obter diferentes instâncias das funções fictícias usando o loop?
Também tentei algumas construções usando std::function<>
, mas não consegui atribuí-lo aos ponteiros de função.