函数重载和调用

function overload and calling

#include <iostream>
using namespace std;
template <class X, class Y>
class A:
{
public:
  X r;
  Y s;
  A() { cout << "hi" << endl; }
  A(X r, Y s) { cout << r << " " << s << endl; }
};
int main()
{
  int val1 = 0;
  float val2 = 0;
  char c;
  cin >> val1;
  cin >> val2;
  cin >> c;
  A<char> a;
  A<int, char>(val1, c);
  A<char, float>(c, val2);
  return 0;
}

代码无法编译,因为第 A<char> a; 行的参数太少。

我想在class中执行A()函数,但它似乎总是认为它需要更多的参数。有人可以告诉我为什么吗?

模板正好需要两个参数,也许你的意思是

A<char, char> a;

请注意,您可以默认分配参数类型,以避免这种情况。 这些行缺少 A.

实例的变量名称
A<int, char>(val1, c);
A<char, float>(c, val2);

您现在设置模板的方式总是必须指定类型 XY。如果你用默认值指定第二个模板,你可以只用第一个模板调用它,而代码会假设第二个模板是默认值:

template <class X, class Y = char>

在这种情况下,默认值为 char