gpt4 book ai didi

C++根据其模板定义一个类成员类型

转载 作者:太空狗 更新时间:2023-10-29 20:35:56 25 4
gpt4 key购买 nike

在我们的代码中,我们有以下类:

template<class A, class B>
class myClass
{
typedef std::list<Object<A,B>> MyList;
typedef std::map<A, typename mList::iterator> MyMap

MyList mList;
MyMap mMap;
}

A 类是元编程的,它可以是字符串、整数等。我想更改代码,以便在类 A 是“元字符串”的情况下使用映射,否则将使用 unordered_map。

我已经尝试添加更多的元编程但还没有成功:

template< class A, class B>
struct MapType // default
{
typedef std::list<Object<A,B>> MyList;
typedef std::unordered_map<A,B> MyMap;
}

//TODO struct with templated A (string) to use std::map

template<class A, class B>
class myClass
{
???? // if A ~ String define myMap to MAP . otherwise unordered

MyList mList;
MyMap mMap;
}

对于使用不同 map 类型的任何其他建议也将不胜感激。

谢谢

最佳答案

一个简单的解决方案是使用 std::conditional 来检查 A 是否与您的“元字符串”类相同(我选择了 std: :string 用于演示目的):

template<class A, class B>
class myClass
{
std::list<Object<A,B>> mList;
std::conditional_t<std::is_same<A,std::string>::value,
std::map<A,B>, std::unordered_map<A,B>> mMap;
};

另一种可能性是使用部分特化:

template<class A, class B>
class myClass
{
std::list<Object<A,B>> mList;
std::unordered_map<A,B> mMap;
};

template<class B>
class myClass<std::string,B>
{
std::list<Object<std::string,B>> mList;
std::map<std::string,B> mMap;
};

关于C++根据其模板定义一个类成员类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40356688/

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