gpt4 book ai didi

c++ - 是否可以在 C++ 运行时告诉容器的值类型?

转载 作者:行者123 更新时间:2023-11-30 02:52:59 27 4
gpt4 key购买 nike

我有时会阅读有关基于 typeid 的运行时类型确定的内容,我尝试使用以下代码

#include <iostream>
#include <vector>
#include <typeinfo>

typedef std::vector<int> Vector;

template <class T> void foo(T &v)
{
cout << typeid(Vector::value_type).name() << endl; // this is ok
cout << typeid(T::value_type).name() << endl; // this doesn't compile
}

void main(void)
{Vector v;

foo(v);
}

上面的代码只有当我们把特定类型放入typeid时才能编译,但如果我改用模板T,它就不起作用了。那么如果我有一个容器v,我如何在运行时确定值类型呢?谢谢。

最佳答案

你需要使用typename:

cout << typeid(typename T::value_type).name() << endl;

这与typeid无关。这是一个普遍的问题,每当您使用类的成员时,您使用的特定类取决于模板参数。默认情况下,编译器假定某个未知类 T 的所有成员都不是类型。否则你必须明确告诉它。

关于c++ - 是否可以在 C++ 运行时告诉容器的值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394242/

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