c++可以实现去掉一层模板么

2019-11-06 12:57:49 +08:00
 shylockhg

就是这样

typename unwrap<std::vector<int>>::type // int

我这里粗糙的试了一下好像不行

#include <type_traits>
#include <vector>

template <typename T>
struct unwrap {
	using type =  T;
};

template <typename wrapper, typename T>
struct unwrap<wrapper<T>> {
	using type = T;
};

int main(int argc, char* argv[]) {
	typename unwrap<std::vector<int>>::type a = 0;
}

1357 次点击
所在节点    问与答
4 条回复
codehz
2019-11-06 13:18:26 +08:00
template<template <typename> X, typename T>
就可以匹配模板模板了,不过对于这个例子,vector 的完整形式有两个 typename,所以还要写一个 typename 才能匹配上
codehz
2019-11-06 13:29:36 +08:00
前面少了一个 typename,下面是完整例子
https://gist.github.com/codehz/b18c62d104f2b7f1a4f3bfb44c5d249b
shylockhg
2019-11-06 14:56:05 +08:00
@codehz 翻不了墙。
codehz
2019-11-06 14:57:49 +08:00
@shylockhg #3
#include <vector>

template <typename T>
struct unwrap {
using type = T;
};

template <template <typename> typename wrapper, typename T>
struct unwrap<wrapper<T>> {
using type = T;
};

template <template <typename, typename> typename wrapper, typename T, typename R>
struct unwrap<wrapper<T, R>> {
using type = T;
};

int main() {
typename unwrap<std::vector<int>>::type a = 0;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/616816

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX