У меня есть класс шаблонов, который может принимать все типы типов: int, double и т. Д. Я хочу проверить, введен ли пользователь правильный тип. Если объект был создан с помощью int, пользователь должен ввести int, если он был с двойным, он должен ввести double и так далее. Я хочу иметь возможность делать это независимо от того, поступает ли вход от файла или клавиатуры. У меня есть 2 вопроса.Проверьте правильность ввода
- Должен ли я выполнять проверку в отношении перегрузки оператора «>>»?
- Как мне проверить? Создать функцию шаблона, которая проверяет тип какого-либо типа?
Я хочу что-то вроде этого:
template <class Ttype>
class foo
{
Ttype a,b,c;
friend istream &operator>> <>(istream &input, foo<Ttype> &X);
//methods
};
template <class Ttype> istream &operator>>(istream &input, foo<Ttype> &X)
{
//check if X.a,X.b,X.c are of Ttype
input>>X.a>>X.b>>X.c;
}
int main()
{
foo<int> a;
cin>>a;
foo<double> b;
cin>>b;
return 0;
}
'X.a' должен быть' Ttype', потому что вы его объявили. Если вы действительно хотите проверить, что вы можете 'static_assert (std :: is_same :: value," not the same ");' но это никогда не будет срабатывать. –
вы можете использовать boost :: spirit, см. [Здесь] (http://www.boost.org/doc/libs/1_58_0/libs/spirit/doc/html/spirit/abstracts/attributes/primitive_attributes.html) и [ здесь] (http://www.boost.org/doc/libs/1_58_0/libs/spirit/doc/html/spirit/qi/reference/numeric.html) –