gpt4 book ai didi

c++ - 如何在 C++ 中使用带有模板的类型作为模板参数

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

我试图使用具有相同功能的不同类型的不同类型的容器,但无法说服我的编译器。以下是我尝试过的一些方法:

#include <iostream>
#include <vector>
#include <list>
using namespace std;

// error: expected a qualified name after 'typename'
template<typename C<T>>
void func1() {
C<T> c;
c.push_back(new T);
}

// error: expected a qualified name after 'typename'
template<typename C<typename T>>
void func2() {
C<T> c;
c.push_back(new T);
}

// error: expected a qualified name after 'typename'
template<typename C<template <typename T>>>
void func3() {
C<T> c;
c.push_back(new T);
}

int main(int argc, char *argv[]) {
func1<vector<int>>();
func1<list<float>>();

func2<vector<int>>();
func2<list<float>>();

func3<vector<int>>();
func3<list<float>>();
return 0;
}

这在 C++ 中可能吗?

最佳答案

我认为最接近原始代码的代码(假设您需要两个参数 CT 而不仅仅是一个 C<T> )如下:

#include <iostream>
#include <vector>
#include <list>
using namespace std;

template<template< class T, class A = allocator<T> > class C, typename T>
void func() {
C<T*> c;
c.push_back(new T);
}

int main(int argc, char *argv[]) {
func<vector, int>();
func<list, float>();
return 0;
}

注意两件事:

  1. vectorlist模板有两个参数,第二个默认为 allocator<T> (其中 T 是第一个参数)。您不能仅使用一个参数来定义模板;实例化时类型系统会报错。

  2. 如果您有一个 C<T> 类型的容器用push_back方法期待 T (比如 vectorlist ),你不能传递它 new T作为参数。我冒昧地将容器固定为 C<T*> 类型.

关于c++ - 如何在 C++ 中使用带有模板的类型作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541452/

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