Почему пространство имен std :: this_thread?

Есть ли техническая причина для пространства имен std :: this_thread? Почему члены этого пространства имен не могут быть реализованы как статические члены класса std :: thread?

4

Решение

От оригинальное предложение, способ получить 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 пространство имен, если они хотят запросить текущий поток. К сожалению, комитет удалил отмену темы во время стандартизации.

15

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]