Как компилятор c ++ выводит параметры шаблона, если только некоторые из них предоставлены

У меня есть этот шаблон класса:

template<class Q, class V>
bool EQ(const Q& q, V v) {
return q.Eq(v);
}

и этот класс:

struct TEq01 {
char n1;
TEq01(const void* p) : n1(*(char*)p)     { }
bool Eq(char n) const                { return n1 == n; }
};

Скажем, я использую это так — только указав первый параметр шаблона

char *sz = "some string";
bool f = EQ<TEq01>(sz, '1');

Как компилятор знает, что TEq01 класс Q вместо класс V? Я пользуюсь visual studio 2013.

2

Решение

Мне просто интересно, как компилятор знает, что TEq01 — это класс Q вместо класса V? Я пользуюсь visual studio 2013.

первый аргумент шаблона вы предоставляете первый параметр шаблона.

Порядок параметров шаблона сохраняется.

Так как вы написали:

template<class Q, class V>
bool EQ...

призвание EQ<TEq01> средства «Q является TEq01 а также V не был поставлен, поэтому он должен быть выведен «.

2

Другие решения

Это шаблонная функция. Шаблоны функций получают типы аргументов независимо от того, что они передают. Возможность указывать типы в стрелках — необязательная вещь, которую вам не нужно использовать, если только вы не пытаетесь форсировать использование определенного типа.

Когда вы указываете типы в стрелках, компилятор идет по порядку, 1, 2, 3. Любые типы, которые вы не установили явно, берут типы из аргументов функции.

2

По вопросам рекламы [email protected]