早晨。我目前正在尝试使用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();}
};
答案 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();}
};