перегрузка функции и вызов - PullRequest
0 голосов
/ 21 марта 2020
#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; имеет слишком мало аргументов.

Я хочу выполнить функцию A() в классе, но, кажется, всегда думает, что ей нужно больше argumenst. Может кто-нибудь посоветовать мне, почему?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Способ, которым вы сейчас настроили свой шаблон, всегда должен указывать на типы, X и Y. Если вы укажете второй шаблон по умолчанию, вы можете назвать его только первым, в то время как код примет второй по умолчанию:

template <class X, class Y = char>

В этом случае по умолчанию будет char.

0 голосов
/ 21 марта 2020

Шаблон занимает ровно два параметра, возможно, вы имели в виду

A<char, char> a;

Обратите внимание, что вы можете назначать типы параметров по умолчанию, чтобы избежать этого. Эти строки пропускают имя varaible для экземпляров A.

A<int, char>(val1, c);
A<char, float>(c, val2);
...