我有一个在内存中连续表示的多维数组.我希望隐藏这种表示,让用户访问数组元素就好像它是多维的:例如my_array[0][3][5]或my_array(0,3,5)类似的东西.直到运行时才确定对象的尺寸,但是使用指定它具有多少维度的类型创建对象.这个元素查找需要被调用数十亿次,因此希望每次调用都需要最小的开销.
我看过类似的问题,但没有真正找到一个好的解决方案.使用[]运算符需要创建N-1维对象,这对于像向量矢量这样的多维结构很好,因为对象已经存在,但是对于连续的数组,它看起来很快就会卷曲并需要某种切片通过原始数组.
我还研究了重载(),这似乎更有希望,但需要指定参数的数量,这将根据数组的维数而变化.我曾考虑使用列表初始化或向量,但希望避免实例化对象.
我对模板和图形只有一点了解,应该有一些方法可以使用C++的宏伟模板功能来()为不同类型(例如不同数量的维度)的数组指定唯一的重载.但我只在真正基本的通用情况下使用模板,比如使用函数float和两者double.
我想象的是这样的:
template<typename TDim>
class MultiArray {
public:
MultiArray() {} //build some things
~MultiArray() {} //destroy some things
// The number of arguments would be == to TDim for the instantiated class
float& operator() (int dim1, int dim2, ...) {
//convert to contiguous index and return ref to element
// I believe the conversion equation is something like:
// dim1 + …Run Code Online (Sandbox Code Playgroud) 我想编写一个行为几乎等同于 Python 字典的 C++ 对象。C++std::map和std::unordered_mapPython 字典已经具备的一些功能,但缺乏最重要的功能之一,即能够添加任意对象和类型。即使不可能,您离实现 Python 字典的功能还有多远?
之前的一些问题(此处和此处)无法处理向字典添加多种类型的问题。
例如,我希望能够在 C++ 中做这样的事情:
my_dict = {'first': 1,
'second': "string",
'third': 3.5,
'fourth': my_object}
my_dict['fifth'] = list([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的解决方案是使用void指向重新解释的数据的指针,或者某种具有某些类型限制的运行时多态性?