이번엔 표준입출력쪽에서 이런기능이 필요해서 따로 만들어두고 일단 여기 적어둔다.
console.hpp
펼쳐두기..
#ifndef CONSOLE_HPP
#define CONSOLE_HPP
#include <iostream>
#include <string>
// operator() 를 부르면 계속 루프를 돌면서 표준출력으로 prompt 를 찍고
// 표준입력으로 받은 문자열을 command_line_handler 에 넘겨 리턴된 값을
// 찍어준다.
template <class T>
class console
{
public:
console(T command_line_handler, const char* prompt)
: command_line_handler_(command_line_handler),
prompt_(prompt)
{
}
void operator()()
{
while(1)
{
std::cout << prompt_;
char line[2048];
std::cin.getline(line, sizeof(line));
if(*line == '\0') continue;
std::cout << command_line_handler_(line) << std::endl;
}
}
private:
T command_line_handler_;
std::string prompt_;
};
// 이건 console 에 넘길수있는 커맨드라인 핸들러 예제 복사생성이
// 가능하고 ostream 에 << 로 넘길수있는 타입을 리턴하는 operator() 만
// 가지고있으면 된다. 어떤 상태를 들고있게 하려면 아래처럼 생성자를
// 활용하자.
struct prefixed_echo
{
std::string prefix_;
prefixed_echo(const char* prefix) : prefix_(prefix)
{
}
std::string operator()(const char* cmd)
{
return prefix_ + cmd;
}
};
#endi
이건 예제
펼쳐두기..
#include "console.hpp"
int main()
{
console<prefixed_echo> c(prefixed_echo("echo: "), "# ");
c();
}
댓글 없음:
댓글 쓰기