正在获取给定对象的类型说明符
Getting the type specifier given an object
我正在尝试编写一个模板函数,该函数将使用STL容器,并显示其中元素的所有出现次数以及它们出现的次数。我计划使用映射,遍历容器,如果不存在,则添加一个新元素,或者增加元素的出现次数。
声明:
template < typename Container_t >
void findOccurrences (const Container_t& inContainer);
我的问题是:我能以某种方式获得容器所包含元素的类型说明符吗?因此,当我创建映射时,键值将是inContainer
中的元素。类似于:
map < typeid ( * inContainer.begin()), int > occurrences;
或者我必须把我的模板改成这样:
template < typename Container_t , typename Element_t >
void findOccurrences ( const Container_t & inContainer , Element_t dummy )
{
map < Element_t , int > occurrences;
}
感谢
这样的东西怎么样:
#include <map>
#include <iterator>
template <typename Iter>
void histogram(Iter begin, Iter end)
{
typedef typename std::iterator_traits<Iter>::value_type T;
std::map<T, size_t> h;
while (begin != end) ++h[*begin++];
// now h holds the count of each distinct element
}
用法:
std::vector<std::string> v = get_strings();
histogram(v.begin(), v.end());
您想要typename Container_t::element_type
也就是说,
std::map <typename Container_t::element_type, int>
有了C++0x,它真的很简单:
map<decltype(*c.begin()), int> occurrences;
对于C++03,您可能需要使用容器中的typedef:
template<typename Container>
// ...
map<Container::element_type, int> occurrences;
请查看"RTTI"(运行时类型信息)
http://en.wikipedia.org/wiki/Run-time_type_information
我希望这能有所帮助。
相关文章:
- 缺少类型说明符,显式类型为"缺少错误"
- 与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 出错(预期的类型说明符)
- 为什么转换函数声明不需要至少一个定义类型说明符
- C++需要所有声明的类型说明符和预期的非限定 id(需要调试帮助)
- printf 数据类型说明符复杂问题
- C++错误:"class name"之前的预期类型说明符
- 缺少类型说明符和另一个问题
- 缺少类型说明符 - 假定为 int.注意 c++ 不支持 default-int
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- 在C++中出现错误之前,无效使用了不完整的类型和所需的类型说明符
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 不能在类型说明符中定义联合
- 没有带有字符串数组的存储类或类型说明符
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 仅为某些模板专用化定义转换运算符:预期类型/预期类型说明符
- 在 C++ 中出现unique_ptr错误之前的预期类型说明符
- 有没有办法将类型说明符存储在变量中
- C 期望类对象的类型说明符
- 是无符号的int"简单类型说明符"
- 在 vscode 上编译错误.类型说明符是 C++11 扩展