Вы не используете понятия. В концептуальном мире конструктор span будет выглядеть так с синтаксисом concept-ts:
struct span{
span(const ContiguousRange&);
span(ContiguousRange&);
span(const span&) =default;
span(span&) =default;
};
или с c ++ 20:
struct span{
span(const ContiguousRange auto&);
span(ContiguousRange auto&);
span(const span&) =default;
span(span&) =default;
};
Понятия здесь для облегчения абстракции. Так что если ваш интерфейс становится более сложным при использовании концепций, то вы пропустили абстракцию. Абстракция здесь ContiguousRange
(спасибо @Lyberta).
Возможно, что-то вроде этого добьется цели:
#!/usr/bin/env python2.6
from __future__ import print_function
import readline
import threading
PROMPT = '> '
def interrupt():
print() # Don't want to end up on the same line the user is typing on.
print('Interrupting cow -- moo!')
print(PROMPT, readline.get_line_buffer(), sep='', end='')
def cli():
while True:
cli = str(raw_input(PROMPT))
if __name__ == '__main__':
threading.Thread(target=cli).start()
threading.Timer(2, interrupt).start()
Я не думаю, что stdin ориентирован на многопотоковое исполнение, таким образом, можно закончить тем, что теряли символы потоку прерывания (который пользователь должен будет перепечатать в конце interrupt
). Я преувеличил сумму interrupt
время с time.sleep
звонить. readline.get_line_buffer
вызов не отобразит символы, которые теряются, таким образом, все это оказывается в порядке.
Обратите внимание, что сам stdout не ориентирован на многопотоковое исполнение, поэтому если у Вас есть несколько потоков прерывания выполнения, это может все еще закончить тем, что выглядело грубым.
Почему Вы пишете свое собственное использование REPL raw_input()
? Вы посмотрели на cmd.Cmd
класс?Править: Я просто нашел sclapp библиотеку, которая может также быть полезной.
Примечание: cmd.Cmd
класс (и sclapp) может или не может непосредственно поддерживать Вашу исходную цель; Вам, вероятно, придется разделить его на подклассы и изменить его по мере необходимости для обеспечения той функции.
Это - своего рода неответ, но я посмотрел бы на код IPYTHON, чтобы видеть, как они делают его.
Я думаю, что у Вас есть 2 основных опции: