gpt4 book ai didi

c++ - 将容器 value_type 作为模板参数传递?

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:34 25 4
gpt4 key购买 nike

是否可以将容器的 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;

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

谢谢。

最佳答案

在 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;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

Live example .

另一方面,如果您仅限于使用 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;
}

关于c++ - 将容器 value_type 作为模板参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com