【发布时间】:2021-11-28 21:23:29
【问题描述】:
我正在用 C++ 编写一个任意排名的张量(多维数组)类,并希望拥有它的静态和动态内存版本。但是,考虑到底层数据容器会有所不同,我正在努力想一种方法来避免在类的静态/动态版本中重复方法。我希望下面这个最小的例子能说明我的观点:
// Product function
template <typename ...data_type>
constexpr auto Product(data_type ..._values)
{
return (_values * ...);
}
// Static memory version
template <class t_data_type, unsigned ...t_dimensions>
class StaticTensor
{
private:
std::array<t_data_type, Product(t_dimensions...)> Entries; // Store entries as contiguous memory
public:
StaticTensor() = default;
~StaticTensor() = default;
void StaticMethod()
{
// Some code that operates on Entries.
}
};
// Dynamic memory version
template <class t_data_type>
class DynamicTensor
{
private:
std::vector<t_data_type> Entries;
public:
DynamicTensor() = default;
~DynamicTensor() = default;
template <typename ...t_dimensions>
void Resize(t_dimensions ...dims)
{
Entries.resize(Product(dims...));
}
void DynamicMethod()
{
// Some code that operates on Entries.
}
};
我已经考虑过基于继承/多态的方法,但似乎我仍然必须在每个专用类中实现单独的方法。理想情况下,我希望所有方法都可以在 std::array 和 std::vector 中对底层迭代器进行操作,而不必担心它们属于哪个数据容器。任何人都可以建议我如何去做吗?
【问题讨论】:
标签: c++ class inheritance polymorphism c++17