Есть ли техническая причина для пространства имен std :: this_thread? Почему члены этого пространства имен не могут быть реализованы как статические члены класса std :: thread?
От оригинальное предложение, способ получить thread::id
пишется get_id()
получаете ли вы thread::id
для себя или для детской ветки
Обратите внимание на использование
this_thread
пространство имен для устранения неоднозначности, когда вы
запрашивая идентификатор для текущего потока, против идентификатора дочернего потока.
get_id
Название этого действия остается неизменным в интересах
сокращение концептуального следа интерфейса.
std::thread my_child_thread(f);
typedef std::thread::id ID;
ID my_id = std::this_thread::get_id(); // The current thread's id
ID your_id = my_child_thread.get_id(); // The child thread's id
Таким образом this_thread
Пространство имен — это читаемый способ различать два, сохраняя при этом концептуальный интерфейс на минимальном уровне (то же имя для получения идентификатора потока).
Вот возможный альтернативный дизайн:
struct thread
{
static int get_id() {return 1;}
int get_id() const {return 2;}
};
Одним из недостатков этого проекта является то, что он не компилируется:
test.cpp:4:9: error: static and non-static member functions with the same parameter types cannot be overloaded
int get_id() const {return 2;}
^
test.cpp:3:16: note: previous declaration is here
static int get_id() {return 1;}
^
1 error generated.
Другой дизайн дал бы статическому члену другое имя. Но теперь интерфейс стал больше. Исходное предложение также относилось к другой функции точно так же:
bool have_i_been_canceled = std::this_thread::cancellation_requested(); // Current thread's cancellation status
bool have_you_been_canceled = my_child_thread.cancellation_requested(); // Child thread's cancellation status
Таким образом, имело смысл повторно использовать имена, чтобы клиентам не приходилось выучивать так много имен. Им просто нужно научиться пользоваться this_thread
пространство имен, если они хотят запросить текущий поток. К сожалению, комитет удалил отмену темы во время стандартизации.
Других решений пока нет …