gpt4 book ai didi

c++ - 重构许多函数以优雅地接收任何类型的参数(模板<任何>)

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:09 24 4
gpt4 key购买 nike

我有一个自定义数据结构。

template<class T> class MyArray3D{
public: void setElement(const int* index,const T& t){
//do something about "index[0,1,2]"
}
public: T& get(const int* index){
//do something about "index[0,1,2]"
}
public: void reserve(const int* index1,const int* index2){
//do something about "index1,2[0,1,2]" (e.g. index can be negative)
}
//about 20 functions, and some fields
};

一切都很好。目前被很多类使用。
然后我希望这些函数接受任何具有 index 的东西( operator[] ) .

我糟糕的解决方案

这是一个正确(但不是很好)的方法。
我改const int*template INT_ARRAY :-

template<class T> class MyArray3D{
public: template<class IARRAY> void setElement(IARRAY index,const T& t){
//do something about "index[0,1,2]"
}
public: template<class IARRAY> T& get(IARRAY index){
//do something about "index[0,1,2]"
}
public: template<class IARRAY1,class IARRAY2>
void reserve(IARRAY1 index1,IARRAY2 index2){
//do something about "index1,2[0,1,2]" (e.g. index can be negative)
}
//about 20 functions, and some fields
};

上面的重构很繁琐。我必须对所有功能都这样做。

如果一个函数有 4 const int* , 它将以 template<class IARRAY1,class IARRAY2,class IARRAY3,class IARRAY4> 作为前缀- 这么难看。

问题

如何优雅地重构上述功能(减少重复和缩短代码)?

我在梦见这样的事情:-

template<class T> class MyArray3D{
using IARRAY1 = please don't care about my type; ????
public: void setElement(IARRAY1 index,const T& t);
public: T& get(IARRAY1 index);
public: void reserve(IARRAY1 index1,IARRAY1 index2);
};

以下是相关问题:-

最佳答案

不幸的是,如果您想要模板函数参数推导并接受任何类型,这是正确的做法,尽管它不简洁。

希望我们能得到 abbreviated Concepts Lite syntax将来,这将允许您执行以下操作:

concept bool Indexable = /* ... */;

template<class T> class MyArray3D{
public:
void setElement(Indexable index, const T& t);
T& get(Indexable index);
void reserve(Indexable index1, Indexable index2);
};

关于c++ - 重构许多函数以优雅地接收任何类型的参数(模板<任何>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42900040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com