我有一個可以接受各種類型的模板類:int,double等。我想檢查用戶是否輸入了正確的類型。如果對象是用int實例化的,那麼用戶應該輸入一個int,如果它是double,他應該輸入一個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,「不一樣」);'但是它永遠不會觸發。 –
你可以使用boost :: spirit,參見[here](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) –