C++ 同一数组中不同类型的函数

C++ 同一数组中不同类型的函数,c++,performance,caching,metaprogramming,std-function,C++,Performance,Caching,Metaprogramming,Std Function,我正在为一个学习目的的图书馆工作,我正试图对我的设计进行重大的改变 我将用一个update调用几个update函数来拆分类系统。但是这些函数可以是任何东西,函数menber或not。因此,我以许多不同的std::function类型结束 出于性能方面的考虑,我并不真的想使用元组(或者它真的很有效,告诉我)。我想使用std::array,但是如何将各种std::function放在一起呢?事实上,它是一个struct,其中包含std::function,但正因为如此,struct得到了相同类型的问

我正在为一个学习目的的图书馆工作,我正试图对我的设计进行重大的改变

我将用一个
update
调用几个
update
函数来拆分
类系统。但是这些函数可以是任何东西,函数menber或not。因此,我以许多不同的
std::function
类型结束

出于性能方面的考虑,我并不真的想使用
元组(或者它真的很有效,告诉我)。我想使用
std::array
,但是如何将各种
std::function
放在一起呢?事实上,它是一个
struct
,其中包含
std::function
,但正因为如此,
struct
得到了相同类型的问题

如果数组可以在编译时生成(没有参数),那么它将是最好的

有一个例子(不是真正的代码)我希望它如何工作

//Function to add a function in the list [[Call by User]]
addSystemBloc<Position, Speed>(function(ArgIDontKnow, Position, Speed), otherThings);

//Function to generate a structure (probably a graph) linked to the array
generateGraph();

//Inside the initialization of the System using the function we just add [[ Call by User ]]
addArgument(id, arg); //id is not really nice, and this guy know the function he wants to add an arg (with std::bind)

//Somwhere in the main loop [[ Call by Library ]]
invoke(func, Position, Speed);
//在列表中添加函数的函数[[用户调用]]
addSystemBloc(功能(ArgIDontKnow、位置、速度)、其他内容);
//函数生成链接到数组的结构(可能是图形)
生成图形();
//在使用函数初始化系统的过程中,我们只添加了[[Call by User]]
addArgument(id,arg)//id不是很好,这个家伙知道他想要添加一个arg的函数(使用std::bind)
//Somwhere在主循环[[库调用]]
调用(函数、位置、速度);

无论如何,数组是指定类型的固定长度值序列。 元组是指定类型值的固定长度序列。 没有方法的结构是指定类型的固定长度值序列

在检索元素(即常量)和移动/复制(即sizeof(Thing)字节)方面,它们都具有相同的性能特征

你在想象什么“性能问题”


请参阅:

数组是指定类型的固定长度值序列。 元组是指定类型值的固定长度序列。 没有方法的结构是指定类型的固定长度值序列

在检索元素(即常量)和移动/复制(即sizeof(Thing)字节)方面,它们都具有相同的性能特征

你在想象什么“性能问题”


请参阅:

您想要一个包含不同类型的数组吗?你不能。数组的所有元素都相同。对于tuple,您担心哪些性能问题?元组没有开销。您打算如何发现这些函数的类型以便调用它们?(如果每个位置都有一个固定的类型,那就是一个元组。)或者(或者他们即将推出的标准库变体和)?不过,我并不是真的建议你这么做,而是建议你尝试重新思考你的设计(当你还在做的时候)。我知道这是不可能的,这就是为什么我要问如何做(一些变通方法)的原因。我不知道元组是否对缓存友好,我想不,但不确定。我将添加一个说明,也许会有所帮助。另一种可能的方法是只使用一个函数类型,它使用一个通用指针(即
void*
)将实际数据传递给函数。您想要一个包含不同类型的数组吗?你不能。数组的所有元素都相同。对于tuple,您担心哪些性能问题?元组没有开销。您打算如何发现这些函数的类型以便调用它们?(如果每个位置都有一个固定的类型,那就是一个元组。)或者(或者他们即将推出的标准库变体和)?不过,我并不是真的建议你这么做,而是建议你尝试重新思考你的设计(当你还在做的时候)。我知道这是不可能的,这就是为什么我要问如何做(一些变通方法)的原因。我不知道元组是否对缓存友好,我想不,但不确定。我将添加一个说明,也许会有所帮助。另一种可能的方法可能是只使用一个函数类型,它使用一个通用指针(即
void*
)将实际数据传递给函数。那么你的意思是元组也是连续内存,没有像数组那样的缓存问题吗?是的,根据对象布局规则,我无法确定这一点,谢谢:)元组太强大了,所以我需要看看他们的缺点。如果你有一个链接来说明对象布局的规则,我会用你的答案来结束这个。你的意思是说元组也是连续内存,没有像数组那样的缓存问题吗?是的,根据对象布局的规则,我不能确定这一点,谢谢:)元组是如此强大,那么oO我需要看看它们的缺点。如果你有一个链接来说明对象布局的规则,我将用你的答案来结束这个链接。