Как мне заставить мой класс вывести внутренний тип параметра без явной ссылки на него?Посмотрите на минимальный пример ниже:
#include <vector>
template <class T>
class foo {
public:
foo(std::vector<T> &x) :
_x(x) {
T dummy = x.front(); // Trying to trick the compiler here
}
private:
std::vector<T> _x;
};
int main() {
std::vector<int> a;
foo<int> b(a); // This works
foo c(a); // This fails
return 0;
}
Я вижу, что foo
ожидает, что его аргумент будет vector<int>
, но он позволяет мне создать объект типа T==[int]
, так что кажетсячто это за внутренний тип!Не обращая внимания на тот факт, что присвоение dummy
завершается неудачно, когда a
пусто ... как я могу сослаться на вложенный внутренний тип?