3

是否可以将容器的 value_type 作为模板参数传递?

就像是:

template<typename VertexType>
class Mesh
{
    std::vector<VertexType> vertices;
};

std::vector<VertexPositionColorNormal> vertices;

// this does not work, but can it work somehow?
Mesh<typename vertices::value_type> mesh;

// this works, but defeats the purpose of not needing to know the type when writing the code
Mesh<typename std::vector<VertexPositionColorNormal>::value_type> mesh;

创建网格(第一个)时,我得到一个“无效的模板参数”,但它应该可以正常工作吗?我在编译时传递了一个已知类型,为什么它不起作用?有什么选择?

谢谢。

4

1 回答 1

8

在 C++11 中,您可以使用decltype

    Mesh<decltype(vertices)::value_type> mesh;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

一个完整的编译示例是:

#include <vector>

struct VertexPositionColorNormal { };

template<typename VertexType>
class Mesh
{
    std::vector<VertexType> vertices;
};

int main()
{
    std::vector<VertexPositionColorNormal> vertices;

    Mesh<decltype(vertices)::value_type> mesh;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

活生生的例子

另一方面,如果您仅限于 C++03,那么您能做的最好的事情可能就是定义一个类型别名:

int main()
{
    std::vector<VertexPositionColorNormal> vertices;

    typedef typename std::vector<VertexPositionColorNormal>::value_type v_type;

    // this does not work, but can it work somehow?
    Mesh<v_type> mesh;
}
于 2013-04-11T15:13:34.597 回答