考虑一个包含一些数据的容器A
:
template<typename T>
struct A
{
std::vector<T> data;
};
在里面,我只会存储原始指针,无论是否为const。说:
A<int*> a1;
A<const int*> a2;
现在我需要一个会返回元素引用的成员函数,因为虽然我存储了指针,但我想要客户端代码 使用引用(更安全):
int& b1 = a1.GetElem(0);
const int& b2 = a2.GetElem(0);
我的问题是:如何从该成员函数中获取T&
或const T&
,具体取决于存储的元素。
我尝试的是remove the pointer type,然后是add the reference:
std::add_lvalue_reference< std::remove_pointer<T>::type >::type
GetElem<T>( int i )
{
return *data[i];
}
但是这不能编译:
error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp> struct std::add_lvalue_reference’
note: expected a type, got ‘std::remove_pointer<T>::type’
我也尝试在我的班级中使用typedef,但这也失败了:
typedef std::remove_pointer<typename T>::type T2;
我有什么方法可以做到吗?
编辑:链接的问题询问有关typename
关键字用法的一般建议,而此问题是关于指针类型与引用类型之间转换的具体问题。这反映在两个问题的标题上,这两个问题是完全无关的。
此外,链接的问题仅与解决给定的示例代码错误相关,但不提供问题的解决方案。如果我没有给出代码片段,它就不会被归类为欺骗。