首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取模板实例c++11的模板

获取模板实例c++11的模板
EN

Stack Overflow用户
提问于 2015-12-12 16:45:42
回答 2查看 112关注 0票数 1

是否有方法获取模板实例的模板?

我做过这件事

代码语言:javascript
复制
#include <iostream>
using namespace std;

//some template class
template <class T>
struct Hola {
   template<class H> using Base = Hola<H>; //typedef of the self template
   T val;
};

int main() {
  auto h =  Hola<int>{}; //using template with int
  h.val = 6.6;

  auto b = typename decltype(h)::Base<float>{}; //using the same template with float
  b.val = 6.6;

  cout << h.val << endl << b.val << endl;
}

它的工作就像预期的那样。

但是,我想知道,在不定义基本模板中的using子句的情况下,是否也可以这样做。我的意思是如下所示

代码语言:javascript
复制
#include <iostream>
using namespace std;

//same class without typedef of self
template <class T>
struct Hola {
   T val;
};

int main() {
  auto h =  Hola<int>{};
  h.val = 6.6;

  using Templ = decltempl(h); //get the template of h
  auto b = Templ<float>{}; //use the template of h with float
  b.val = 6.6;

  cout << h.val << endl << b.val << endl;
}

注意到

假设所需类型只有一个可能的源模板,以避免部分专门化的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 21:59:02

您可以通过部分专门化来完成这一任务。

代码语言:javascript
复制
template<typename T, typename U> struct templ_of;
template<typename T, template<typename> class U, typename A> struct templ_of<T, U<A>> {
    using type = U<T>;
}
template<typename T, typename U>
using rebind = typename templ_of<T, U>::type;

这台机器用于标准分配器,这些分配器是由集装箱回弹的。

票数 2
EN

Stack Overflow用户

发布于 2015-12-12 21:09:35

不幸的是,C++中无法存在解密说明符。这是因为模板的工作方式与其工作方式相同;-)

类模板就像蛋糕配方。当comiler注意到(在代码中)您想要使用特定种类的蛋糕(模板实例化)时,它会为您烘焙一个蛋糕(创建一个常规类,不记得它是一个模板),这样您就可以将它用作蛋糕(类),而不是菜谱(模板)。

您可以在编译时处理模板(阅读有关模板元编程的内容),但这在运行时是不可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34242359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档