当前位置: 首页 > 知识库问答 >
问题:

如何确定将使用哪个模板

祁建业
2023-03-14
template<typename T>
void a(T) {cout << "(T)" << endl;}

template<>
void a<>(int*) {cout << "(int)" << endl;}

template<typename T>
void a(T*) {cout << "(T*)" << endl;}

template<typename T>
void b(T) {cout << "(T)" << endl;}

template<typename T>
void b(T*) {cout << "(T*)" << endl;}

template<>
void b<>(int*) {cout << "(int)" << endl;}

int main()
{
  int i;
  a(&i);
  b(&i); 
  return 0;
}
(T*)
(int)

我以为是:

(int)
(int)

共有1个答案

霍财
2023-03-14

只考虑主模板(因此没有专门化)以选择更专门化的重载。

一旦选择完成与主模板,我们使用专门化如果有。

现在,模板<>void a<>(int*);只能是模板 void a(T) 的专门化(尚未看到其他版本)。

    null
int i;
a(&i); // a<T*> with T=int*, no specialization for a<U*> (U=int) exist -> generic template called
b(&i); // b<T*> with T=int*, specialization for b<U*> (U=int) exists -> specialization called
 类似资料:
  • 我没有指定任何GC,我认为我的JVM默认情况下没有启用任何GC。 当然,我知道 OpenJDK8 默认使用并行GC,但我认为它应该可以通过命令行打印,如下所示: < code > Java-XX:print flags final | grep Use | grep GC 我期望输出包含< code > bool UseParallelOldGC = true { product } ,但它不是:

  • 问题内容: 无论是从Ipython会话内部还是从脚本内部进行交互,您如何确定matplotlib正在使用哪个后端? 问题答案: 使用该函数获取一个字符串,该字符串表示正在使用哪个后端:

  • 我有一个客户端,它通过指定TLS 1.2发送握手请求到维基,但维基用TLS 1.0版回复。我如何让维基使用1.2版

  • 问题内容: 是否有任何工具可以列出应用程序有效使用哪些类以及何时有效使用某些类,甚至更好地自动修剪JAR库以仅提供被引用和使用的类? 问题答案: 请记住,正如停机问题所证明的那样,您不能肯定地说某个特定类已使用或未使用。至少在任何中等复杂的应用程序上。这是因为类不仅在编译时绑定,而且可以加载: 基于XML配置(例如Spring); 从属性文件加载(例如JDBC驱动程序名称); 动态添加注释; 由于

  • 假设我有一个卷,我知道它的名称或id。 我想确定使用卷的容器列表(它们的名称或id)。 我可以使用什么命令来检索这些信息? 我认为它可以存储在docker volume inspect的输出中

  • 问题内容: 现有应用程序的类路径中有大量的JAR文件。一定要确保最初添加了所有JAR。显然没有使用某些JAR,我们已经删除了其中一些不需要的JAR,而没有引起任何问题。 如何确定正在使用哪些JAR,哪些是不需要的(除尝试和错误方法外)? 问题答案: Tattletale是一个很好的工具。它对字节码起作用,因此有可能通过反射使用某些类,而这些类不会出现在报告中。 这里( 链接不再有效 )是示例报告。