是否可以使用条件运算符将输入流传递给函数?
Can I use conditional operator to pass an input stream to a function?
在某些情况下我不能使用if-else
但只有我们可以使用conditional operator ?
例如在成员初始化列表中,例如:
struct vector{
vector(int n) : sz_{n}, elem{ n ? new int[n] : nullptr }
{}
};
现在我有一个模板函数,它引用std::istream
或std::ifstream
对象并引用std::string
。所以假设该函数从文件data.txt
读取输入;如果输入失败,则文件流对象失败,然后传递std::cin
以从标准输入设备读取输入。
template<class T>
void readInput(T& in, std::string& str) {
std::getline(in, str);
}
int main(){
std::ifstream in("data.txt");
std::string strLine{};
readInput<>((in ? in : std::cin), strLine);
std::cout << strLine << std::endl;
std::cout << std::endl;
}
在此之前没关系。但是我想使用函数
readInput
来获取std::getline(T&, std::string)
我的意思是它需要一个指向std::getline
的指针。所以这就是我尝试过的:template<class T> void readInput(std::istream& (*pfn)(T&, std::string&), T& stream_in, std::string& sLine) { (*pfn)(stream_in, sLine); }
正如您在上面看到的,也许我对如何重载不正确readInput
它需要一个指向像std::getline()
这样的函数的指针。
然后我想在主要做和以前一样的事情:
readInput<>(std::getline, in ? in : std::cin, strLine);
你应该使指向函数参数返回的指针的返回类型T&
而不是std::istream
:
template<class T>
void readInput(T& (*pfn)(T&, std::string&), T& stream_in, std::string& sLine) {
(*pfn)(stream_in, sLine);
}
总的来说,您可以:
readInput<>(std::getline, in ? in : std::cin, strLine);
std::cout << strLine << std::endl;
相关文章:
- 如何忽略输入流中的某些字符?
- C++输入流.与 cin unget() 函数有点混淆
- 从输入流中读取行,并能够跳过块
- 如果我更改函数输入,我的递归不起作用?
- 初始化与函数输入相关的全局数组
- 使用 Visual Studio 代码读取 C++ 中的输入流时出错
- 处理输入流运算符>>中的无效输入
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- 将函数更改为具有设置函数输入变量的方法的类
- 树莓派上的端口音频,找不到输入流的设备
- 如何避免将 const 和非 const 成员函数输入到模板中的代码重复
- 如何将C++输入流分隔符包含在结果令牌中
- 如果两个输入流相等,我如何构造主()到输出是
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 使用非成员函数从输入流中提取类对象
- 迭代器作为C 中的函数输入
- CIN是否将输入流中的无效字符取用
- getline 和在类函数中传递输入流,主表达式错误
- 输入流函数get在c++中
- 实现一个从输入流中读取一系列值作为参数的函数