gpt4 book ai didi

c++ - 管理容器的模板类,获取包含数据的类型

转载 作者:行者123 更新时间:2023-11-30 00:47:15 28 4
gpt4 key购买 nike

我有一个作用于容器的模板化 C++ 类。在类实现中,我需要访问容器包含的数据类型。我目前是这样定义它的:

template <typename ContainerType, typename DataType>
class MyClass {
DataType a;
DataType foo(DataVector& vec, DataType s);
};

当我实例化它时,我会像这样实例化它

MyClass< vector<float>, float > c1;
MyClass< CustomVector<double>, double > c2;
MyClass< Lib::ContainerFloat, Lib::Float > c3;

这行得通,但是有没有一种方法可以在不复制类型信息(即 float、double 等)的情况下做到这一点? IE。使用一些类似 decltype 的魔法来获取包含的数据类型。所以我希望能够实例化:

MyClass< vector<float> > c1;
MyClass< CustomVector<double> > c2;
MyClass< Lib::ContainerFloat > c3;

并声明类:

template <typename ContainerType>
class MyClass {
// get DataType automatically from ContainerType
DataType a;
DataType foo(DataVector& vec, DataType s);
};

最佳答案

作为一个概念,所有容器都应该支持 value_type 作为一种类型。参见 http://en.cppreference.com/w/cpp/concept/Container .

我最后检查过,value_type 受以下支持:

  1. std::vector
  2. std::list
  3. std::set
  4. std::multiset
  5. std::unordered_set
  6. std::queue
  7. std::array
  8. std::map
  9. std::unordered_map
  10. std::multimap
  11. std::stack
  12. std::priority_queue

我认为您可以安全使用:

template <typename ContainerType>
class MyClass {
using DataType = ContainerType::value_type;
};

MyClass< vector<float>> c1;

如果 DataType 可以与 ContainerType::value_type 不同,那么使用它会更好(感谢@AlexeyAndronov 的建议):

template <typename ContainerType,
typename DataType = ContainerType::value_type>
class MyClass {
};

关于c++ - 管理容器的模板类,获取包含数据的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472307/

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