我正在使用 C++11,我需要像 transform(容器的 STL 算法)这样的东西来转换 template<typename ...T
> 进入 <typename ...T::something>
所以我可以用它来继承:
例如:
template<typename T>
struct typeOf{
using type = T;
};
template<typename ...T> // All the arguments must be `typeOf`'s
class tupleOf : tuple<T::type...>{
}
这样:
tupleOf<typeOf<int>,typeOf<char>>
会给我一个tuple<int,char>
我想在不使用 C++14 功能的情况下执行此操作
最佳答案
你可以这样做:
template <typename T, template <typename> class f>
struct transform;
template <template <typename...> class C, typename...Ts, template <typename> class f>
struct transform<C<Ts...>, f>
{
using type = C<typename f<Ts>::type...>;
};
和用法:
static_assert(std::is_same<std::tuple<char, int>,
transform<std::tuple<char*, int*>,
std::remove_pointer>::type>::value,
"unexpected");
关于c++ - 可变参数模板上的变换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863332/