0
如何在模板函数或类中实例化一个包含类型的容器变量?如何在模板函数或类中实例化一个包含类型的容器变量?
我说对dependent scope; need typename in front;
推荐类型名称但还是没能使其发挥作用。
#include <iostream>
#include <array>
#include <type_traits>
#include <typeinfo>
#include <vector>
using namespace std;
template<class T>
void crazy_func_byvalue(T data){
typename decltype(data)::value_type var; //typename added here
cout<< typeid(var).name();
cout<<endl;
return;
}
template<class T>
void crazy_func_byaddress(T& data){
typename decltype(data)::value_type var;
cout<< typeid(var).name();
cout<<endl;
return;
}
class test{
};
int main(){
std::array<double,12> var1={1593,-88517,14301,3200,6,-15099,3200,5881,-2593,11,57361,-92990};
decltype(var1)::value_type x;
std::vector<test> var2;
crazy_func_byvalue(var1);
crazy_func_byvalue(var2);
crazy_func_byaddress(var1); //error: 'std::array<double, 12ul>&' is not a class, struct, or union type
crazy_func_byaddress(var2); //error: 'std::vector<test>&' is not a class, struct, or union type
//cout<<"It is working here";
return 0;
}
谢谢。它的工作,我试图做同样的事情,但无法找出确切的方式来做到这一点。 –
@KinanAlSarmini - 明显;但OP向我们展示了两个不同的函数,其中使用'decltype()';第一个工作,第二个不工作。他可以在两者中使用'T :: value_type',但是很重要(恕我直言),以显示如何在引用变量中使用'decltype'。 – max66