提取容器模板以存储不同类型

问题描述 投票:0回答:1

给定某种类型的容器作为输入,是否可以“提取”容器模板并将其实例化为不同的类型?例如:

void f ( auto& x ) {
  getContainerTemplate(x)<int> a (10); // getContainerTemplate() 
  // is some magic function.
}

根据

f()
的类型,
x
的效果应该如下:

void f ( std::vector<double>& x ) {
  std::vector<int> a(10);
}

void f ( parlay::sequence<double>& x ) { // parlay::sequence is
  // another container template storing elements contiguously.
  parlay::sequence<int> a(10);
}
c++ templates template-meta-programming
1个回答
0
投票

也许是这样的:

template <typename T, typename C>
struct ContainerTypeReplacer;

template <typename T, template <typename...> class C, typename... Args>
struct ContainerTypeReplacer<T, C<Args...>> {
    using type = C<T>;
};

template <typename T, typename C>
typename ContainerTypeReplacer<T, C>::type getContainerTemplate(const C&);

用途:

void f (auto& x) {
  // if x is of type e.g. std::vector<double>,
  // then a is std::vector<int>
  decltype(getContainerTemplate<int>(x)) a(10);
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.