为什么在实例化模板时必须在参数包中显式显示类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在实例化模板时必须在参数包中显式显示类型?相关的知识,希望对你有一定的参考价值。

我有一个例子来说明我的问题:

#include <utility>

class Foo {
 public:
  Foo(int i) {}
};

template<typename T, typename ...Args>
class Bar {
 public:
  T t;
  Bar(Args &&... args) : t(std::forward<Args>(args)...) {}
};

并且如果我想实例化此模板:

Bar<Foo> foo(1);

编译器抛出错误:

no matching function for call to ‘Bar<Foo>::Bar(int)’

所以我必须写这个:

Bar<Foo, int> foo(1);

这很烦人,特别是如果我有一些类的参数列表很长的话。

所以有什么方法可以摆脱在参数包中显式显示类型的问题

答案

如果要构造函数转发,请使that

以上是关于为什么在实例化模板时必须在参数包中显式显示类型?的主要内容,如果未能解决你的问题,请参考以下文章

显式实例化模板类的显式实例化模板方法

正确使用函数的显式模板实例化?

C++泛型编程

C++泛型编程

C++泛型编程

为啥在 Haskell 中显式推导 Show/Read?