如何在输入流中接受多种数据类型?
How can I accept multiple data types into my input stream?
template< typename T >
void somefunction()
{
T value;
cout << " value = ";
cin >> value;
}
现在看起来有点奇怪,但是我们可以有一个接受多个的函数模板吗数据类型(如float和int)。
如果你想将模板限制为int和float类型,你必须对模板进行专门化:
template< typename T >
void somefunction()
{
// May be throw std::bad_typeid
};
template<>
void somefunction<int>()
{
int value;
cout << " int value = ";
cin >> value;
};
template<>
void somefunction<float>()
{
float value;
cout << " float value = ";
cin >> value;
};
如果希望限制模板函数,最好的方法是使用专门化。创建一个泛型方法,它不做任何事情,或断言/抛出异常,但具有针对您的类型的专门实现。类似的,
template< typename T >
void somefunction()
{
std::cerr << "Not implemented." << std::endl;
}
template< >
void somefunction< float >()
{
T value;
cout << " value (float) = ";
cin >> value;
}
template< >
void somefunction< int >()
{
int value;
cout << " value (int) = ";
cin >> value;
}
当然,当添加更多类型(double、long、char等)时,这可能意味着重复代码。或者你可以尝试使用Boost的enable_if.
另一种情况,当您希望一次加载两个值时,需要提供两个模板参数:
template< typename T1, typename T2 >
void somefunction()
{
T1 first;
std::cout << " first value = ";
std::cin >> first ;
assert( std::cin.good() );
T2 second;
std::cout << " second value = ";
std::cin >> second ;
}
还要确保在更复杂的情况下正确检查输入流的良好/失败状态(cin)。简单地说,我使用了assert…
是这是可能的。如果数据类型支持operator >>
(和operator <<
,如果你想打印它)
相关文章:
- 如何在 CPP 中检查给定输入的数据类型?
- 将空格作为单字符数据类型的输入?
- 函数重载并根据相同的输入返回不同的数据类型
- 有没有办法在函数 c++ 中输入任何数据类型?
- 是否可以用类似C/C++(或任何语言)的语言,从作为用户输入的字符串或文件中创建用户定义的数据类型
- 使用 scanf() 具有不同数据类型的多个输入
- 输入数据类型检查循环未按预期工作 (C++)
- 如果输入变量的数据类型与以前不同,如何使我的循环仍然正常运行?
- C++ 从用户那里获取未知数据类型输入
- C++:获取用户通过cin输入的数据类型
- 如何在无效的数据类型输入后继续循环
- 如何将自定义数据类型(用std::对填充的std::数组)写入文件流
- 正确数据类型的输入验证
- C++,如何验证输入的数据是否为正确的数据类型
- C++具有混合分隔符和数据类型的文件输入
- 我们应该使用哪种数据类型来输入一个介于 0<= 数字 <= 10^18 之间的数字
- 如何验证数据类型输入
- 如何处理csv文件输入流,我需要将文件的每一行中的数据划分为6个不同的变量(类型字符串和int)
- c++中的混合数据类型输入
- 如何在输入流中接受多种数据类型?