如何从带有模板化类的指针类型中获取引用类型?

时间:2016-12-17 16:46:41

标签: c++ c++11 templates pointers reference

考虑一个包含一些数据的容器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关键字用法的一般建议,而此问题是关于指针类型与引用类型之间转换的具体问题。这反映在两个问题的标题上,这两个问题是完全无关的。 此外,链接的问题仅与解决给定的示例代码错误相关,但不提供问题的解决方案。如果我没有给出代码片段,它就不会被归类为欺骗。

0 个答案:

没有答案