有没有办法从模板专业化中获取模板?例如,std::unordered_map从std::unordered_map<char, char>要传递的类型变量作为模板模板参数.
最小的例子:
#include <unordered_map>
template <template <class ...> class t_map>
class A
{
public:
typedef t_map <int, int> map_type;
};
int main(int argc, char const **argv)
{
std::unordered_map<char, char> map;
// decltype yields std::unordered_map<char, char> (as expected).
typename A<decltype(map)>::map_type map_2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是如何创建新类型的示例,其中交换模板参数 (int)(通过字符串):
#include <vector>
#include <string>
template <typename container, typename newt>
struct replace;
template <typename p1, typename alloc, template<typename,typename > class containerTemplate, typename newt>
struct replace<containerTemplate<p1,alloc>,newt> {
public:
typedef containerTemplate<newt,alloc> result;
};
int main() {
replace<std::vector<int>,std::string>::result vs;
vs.push_back("a string");
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以将 std::unordered_map 作为模板参数传递给您的函数,并将 char 替换为您想要的任何其他类型。您可能需要根据您的需要调整我的示例。但原理应该很清楚。
编辑: 对于容器更通用,对于替换不太通用:
template <class Container>
struct replace;
template <template <class...> class Container, class... Ts>
struct replace<Container<Ts...>> {
typedef Container<std::string> result;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |