C2228使用decltype时出错

时间:2014-05-02 17:30:43

标签: c++ compiler-errors using decltype

早晨。我目前正在尝试使用C ++创建Graph类(Visual Studio 2013 Nov CTP)。 我正在制作一个Incidence类来存储边缘。我想将Incidence类的内部Container存储在typedef中,而不是在模板定义中添加另一个typename,以便类定义更通用。但是使用&x 39;使用x = decltype(y)'继续造成错误C2228' at的必须有class / struct / union'。我已经尝试了谷歌,但还没有找到解决方案。

代码:

#include<list>
#include<vector>

template<typename Container = std::list<std::vector<bool>>>
class Incidence
{
private:
Container   Connections;
using Contained = decltype(Connections.at());
using Connections_Size_T = decltype(Connections.size());

public:

template<typename Index>
inline Contained operator[](Index Input_Index)
{return Connections[Input_Index];}

inline Connections_Size_T size()
{return Connections.size();}
};

1 个答案:

答案 0 :(得分:0)

回答自己的问题: 不像我希望的那样整洁,但至少直接decltype() - 函数编译和工作:

template<typename Container = std::list<std::vector<bool>>>
class Incidence
{
private:
Container   Connections;
public: 
template<typename Index>
inline auto operator[](Index Input_Index) -> decltype(Connections[])
{return Connections[Input_Index];}

inline auto size() -> decltype(Connections.size())
{return Connections.size();}
};