【发布时间】:2012-10-14 22:56:29
【问题描述】:
很遗憾,我丢失了本文的链接和源代码,但我确实记得它是关于 C++ 中的元编程和模板的;在谈论模板方法的限制时,本文谈到传递给模板的内容不是泛型类型,而只是具有相关地址的类型(或可寻址的,我不记得确切的词)可以作为参数传递给模板。
有人可以澄清地址、类型和模板之间的这种关系吗?
类型可以用地址来标识?
编辑
例如at this link,在链接的常见问题解答的最后一部分中,模板系统被描述为接受地址而不是泛型类型的东西。
【问题讨论】:
-
类型大多只在编译时才知道(RTTI en.wikipedia.org/wiki/Run-time_type_information 是个例外)。地址在运行时没有定义的类型。 (例如
malloc或mmap的返回),因为通过将指针转换为不同的类型,您不会更改它包含的地址。 -
我不确定你在这里问什么。您引用的常见问题解答条目是关于传递 non-type 模板参数。函数、积分等的地址就是这样。字符串文字是一个棘手的异常,它不能按您的预期工作,因此是常见问题解答条目。
-
您确定您没有考虑 linkage 而不是“可寻址”吗?
-
我的猜测是,这可能与您无法真正制作需要未实例化模板作为参数的模板有关。 C++ 模板扩展逻辑对已实例化和未实例化的模板有很大的区别,而未实例化的模板是一种幽灵般的东西,您只能在非常有限的一组上下文中引用。他们当然不是类型。只有实例化的模板才是类型。
标签: c++ templates types metaprogramming c++-address