在文章中多次阅读索赔 - 我想将此问题添加到Stackoverflow,并询问社区 - 以下代码是否可移植?
template<template<typename T, typename Alloc> class C>
void f() {
/* some code goes here ... */
}
int main() {
f<std::vector>();
}
Run Code Online (Sandbox Code Playgroud)
供应的实施是否std::vector真的允许有两个众所周知的额外的,默认的模板参数?这会使上面的代码格式错误,因为它假设有两个模板参数.见最后一段在这篇文章中对这种要求的一个例子.
假设我有一个 STL 容器类型(不是对象),例如vector<A>. 现在是这样value_type,A所以我想把它改成B。
基本上,我想要一个这种形式的类模板,或其变体:
template<typename container, typename new_value_type>
struct change_value_type
{
typedef /*....*/ new_container;
};
Run Code Online (Sandbox Code Playgroud)
这样我就可以按以下方式使用它:
typename change_value_type<vector<A>, B>::new_container vectorOfB;
vectorOfB.push_back(B());
vectorOfB.push_back(B());
vectorOfB.push_back(B());
//etc
Run Code Online (Sandbox Code Playgroud)
意思是,new_container是vector<B>
是否可以?