C++ 给定一个模板类,有没有办法得到;“基础”/无模板类型?

C++ 给定一个模板类,有没有办法得到;“基础”/无模板类型?,c++,C++,非常简单,但可能不太可能:给定一些T,有没有办法获得T?下面是一个更好的代码示例: 模板 结构参数化\u类{ }; 样板 使用make_floaty=T;//由于t不是“基”类型,因此无法编译 int main(){ 使用int_类=参数化_类; 使用float_class=使_浮动; } 我不认为是这样,但我想确定一下。你当然可以,尽管不是一流公民会有点棘手: 模板 结构使_浮动; 样板 结构使浮动{ 使用类型=模板; }; 样板 使用make\u floaty\u t=typename m

非常简单,但可能不太可能:给定一些
T
,有没有办法获得
T
?下面是一个更好的代码示例:

模板
结构参数化\u类{
};
样板
使用make_floaty=T;//由于t不是“基”类型,因此无法编译
int main(){
使用int_类=参数化_类;
使用float_class=使_浮动;
}

我不认为是这样,但我想确定一下。

你当然可以,尽管不是一流公民会有点棘手:

模板
结构使_浮动;
样板
结构使浮动{
使用类型=模板;
};
样板
使用make\u floaty\u t=typename make\u floaty::type;

你当然可以,尽管不是一流公民会让事情变得有点棘手:

模板
结构使_浮动;
样板
结构使浮动{
使用类型=模板;
};
样板
使用make\u floaty\u t=typename make\u floaty::type;

通过使用模板参数,您可以编写一个特性,给定模板的实例化和另一种类型,它“返回”另一种类型的实例化:

template <typename OLDINSTANTIATION,typename NEWPARAMETER>
struct replace_template_parameter;

template <template<typename...> class T,typename OLDPARAM,typename NEWPARAM>
struct replace_template_parameter< T<OLDPARAM>,NEWPARAM> {
    using type = T<NEWPARAM>;
};
:

#包括
#包括
模板结构参数化的_类{};
模板结构替换模板参数;
样板
struct replace_template_参数{
使用类型=T;
};
模板使用make_floaty=typename替换_template_参数::type;
int main(){
使用int_类=参数化_类;
使用float_class=使_浮动;
std::cout::value;
}

通过使用模板参数,您可以编写一个特性,给定模板的实例化和另一种类型,它“返回”另一种类型的实例化:

template <typename OLDINSTANTIATION,typename NEWPARAMETER>
struct replace_template_parameter;

template <template<typename...> class T,typename OLDPARAM,typename NEWPARAM>
struct replace_template_parameter< T<OLDPARAM>,NEWPARAM> {
    using type = T<NEWPARAM>;
};
:

#包括
#包括
模板结构参数化的_类{};
模板结构替换模板参数;
样板
struct replace_template_参数{
使用类型=T;
};
模板使用make_floaty=typename替换_template_参数::type;
int main(){
使用int_类=参数化_类;
使用float_class=使_浮动;
std::cout::value;
}

?明显的扩展:
模板结构重新绑定{using type=template;}明显的扩展:
模板结构重新绑定{using type=template;}
#include <iostream>
#include <type_traits>

template<class T> struct parametrized_class{};

template <typename OLDINSTANTIATION,typename NEWPARAMETER> struct replace_template_parameter;

template <template<typename...> class T,typename OLDPARAM,typename NEWPARAM>
struct replace_template_parameter< T<OLDPARAM>,NEWPARAM> {
    using type = T<NEWPARAM>;
};

template <class T> using make_floaty = typename replace_template_parameter< T,float>::type;

int main() {
   using int_class = parametrized_class<int>;
   using float_class = make_floaty<int_class>;
   std::cout << std::is_same< float_class, parametrized_class<float>>::value;
}