【发布时间】:2013-08-30 21:04:33
【问题描述】:
我正在尝试使用具有相同功能的不同类型的不同类型的容器,但无法说服我的编译器。以下是我尝试过的一些事情:
#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++ 中可行吗?
【问题讨论】:
-
看起来你只是想要
typename T。 -
@chris 你是什么意思?我的应用程序中需要容器类型(例如
vector)和底层类型(例如int)。 -
您传入的是实例,而不是类模板本身(例如,
func1<vector>()。该函数可能只是T t(1);以产生相同的效果。请记住,并非所有容器都支持相同的操作。 -
@chris 你能写一个例子作为答案吗?我不确定我明白你的意思。