C++ 创建容器的模板类
我试图创建一个类作为容器包装器,类似这样C++ 创建容器的模板类,c++,templates,C++,Templates,我试图创建一个类作为容器包装器,类似这样 #include <vector> template <typename T, typename U> class Test { T<U> list; }; int main() { Test<std::vector, int> test; } #include <vector> template <typename T> class Test { T l
#include <vector>
template <typename T, typename U>
class Test {
T<U> list;
};
int main() {
Test<std::vector, int> test;
}
#include <vector>
template <typename T>
class Test {
T list;
};
int main() {
Test<std::vector<int>> test;
}
#包括
模板
课堂测试{
T表;
};
int main(){
试验;
}
但这行不通。我知道这样使用它会有用的
#include <vector>
template <typename T, typename U>
class Test {
T<U> list;
};
int main() {
Test<std::vector, int> test;
}
#include <vector>
template <typename T>
class Test {
T list;
};
int main() {
Test<std::vector<int>> test;
}
#包括
模板
课堂测试{
T表;
};
int main(){
试验;
}
但是我该如何写插入语呢
template <typename T>
class Test {
T list;
public:
void insert(??? element) {
...
}
};
模板
课堂测试{
T表;
公众:
空心插入件(?元件){
...
}
};
TIA,Narase
但这行不通
对于Test
的第一个片段,由于std::vector
有,我们必须使用模板参数在T
的声明中指定这些模板参数的存在,如下所示。
这里我使用变量一,然后T
对
T=std::vector
和编译错误被删除
我该如何写插入语
template <typename T>
class Test {
T list;
public:
void insert(??? element) {
...
}
};
下面的代码还显示了Test::insert
的实现示例。
因为在C++11及以上版本中,这里我将转发引用(Scott Meyers称之为)应用于它。
在这种方法中,我们不需要在Test::insert
定义中指定Test::list
的值类型,向Test::insert
传递错误的类型会导致编译错误。
如果需要std::vector
的值类型,则可以使用成员类型std::vector::value\u type
:
template <template<class...> class T, class ...U>
class Test
{
T<U...> list;
public:
template<class ...V>
void insert(V&& ...element) {
list.insert(std::forward<V>(element)...);
}
typename T<U...>::iterator begin() noexcept {
return list.begin();
}
typename T<U...>::iterator end() noexcept {
return list.end();
}
using value_type = typename T<U...>::value_type;
};
作为另一个示例,此包装器类还可用于std::map
,如下所示:
static\u断言(
std::is_same::value,“oops!”;//好啊
测试测试;//好啊
测试插入物(标准:制作配对(1,11));
测试插入物(标准:制作成对(2,99));
for(auto it=test.begin();it!=test.end();+it){
std::cout first最简单的方法是
template <typename T>
class Test {
....
void insert(const typename T::value_type& element);
void insert(typename T::value_type&& element);