【发布时间】:2015-06-14 11:56:08
【问题描述】:
您好,我正在练习模板和类型推导,想尝试制作一个带有嵌套模板参数的简单函数模板,以打印出任何 stl 容器的内容:
template <template<T, ALLOC> CONT>
void Print(const CONT<T, ALLOC> &c) {
for (const T &elem : c) std::cout << elem << " ";
std::cout << std::endl;
}
还有我的测试用例:
int main() {
std::list<int> intlist{ 1, 2, 3, 4, 5 };
std::vector<float> floatvec{ 0.2f, 0.5f };
Print(intlist);
Print(floatvec);
}
但是,我收到一个编译器错误,无法推断 T 和 ALLOC 的类型。有没有办法让我编写这个函数而不必显式声明模板参数的类型?
请注意,我这里的对象是能够推断出存储在传入的 stl 容器中的类型。因此,如果在 T 中传递一个整数向量,则将推导出为 Int 类型。
【问题讨论】:
-
模板本身甚至不应该编译。
template<T, ALLOC> CONT说CONT是一个模板,它有两个类型为T和ALLOC的非类型模板参数。这应该会导致T和ALLOC的名称查找失败。 -- 像这样:coliru.stacked-crooked.com/a/50c8edf643ed26f0 -
哦,而且你忘记了
CONT之前的class,如果这应该是一个模板template-parameter:@987654332 @
标签: c++ templates type-deduction