c – 指向数据类型的指针的类模板推导

前端之家收集整理的这篇文章主要介绍了c – 指向数据类型的指针的类模板推导前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下包装类:
template <typename T>
class Remap {
  public:
    Remap(T *data,int *remap) : data(data),remap(remap){};
    T &operator[](std::size_t idx) const { return data[remap[idx]]; }
  private:
    T *data;
    int *remap;
};

如果我称它为:

Remap<double> remap(data,remap);

其中数据的类型为double *.如果我试图让编译器(intel icc 15.0.3,-std = c 11)推导出模板类型:

Remap remap(data,remap);

它失败并显示错误消息:

argument list for class template "Remap" is missing

我尽量不违反DRY原则,因此想解决这个问题.

解决方法

在C 17之前,没有类模板参数的推论.

解决方法是使用某种生成Remap对象的get_remap模板函数

template<typename T>
Remap<T> get_remap(T* data,int* remap) {
    return Remap<T>(data,remap);
}

然后使用它像:

double* data = nullptr;
int* remap = nullptr;

auto remap_obj = get_remap(data,remap);

Example

此外,使用C 14支持,get_remap可能会缩短为:

template<typename T>
auto get_remap(T* data,remap);
}

让编译器推导出一种返回类型.

从C 17开始,您可以使用class template argument deduction并简单地写:

double* data = nullptr;
int* remap = nullptr;

Remap remap_obj(data,remap);

Example

猜你在找的C&C++相关文章