В настоящее время я изучаю потоки повышения. И я наткнулся на то, что класс потока имеет конструктор, который принимает вызываемые объекты. Что такое вызываемые объекты?Что такое вызываемый объект в C++?
class CallableClass
{
private:
// Number of iterations
int m_iterations;
public:
// Default constructor
CallableClass()
{
m_iterations=10;
}
// Constructor with number of iterations
CallableClass(int iterations)
{
m_iterations=iterations;
}
// Copy constructor
CallableClass(const CallableClass& source)
{
m_iterations=source.m_iterations;
}
// Destructor
~CallableClass()
{
}
// Assignment operator
CallableClass& operator = (const CallableClass& source)
{
m_iterations=source.m_iterations;
return *this;
}
// Static function called by thread
static void StaticFunction()
{
for (int i=0; i < 10; i++) // Hard-coded upper limit
{
cout<<i<<"Do something in parallel (Static function)."<<endl;
boost::this_thread::yield(); // 'yield' discussed in section 18.6
}
}
// Operator() called by the thread
void operator()()
{
for (int i=0; i<m_iterations; i++)
{
cout<<i<<" - Do something in parallel (operator())."<<endl;
boost::this_thread::yield(); // 'yield' discussed in section 18.6
}
}
};
Как это становится вызываемым объектом? Это из-за перегрузки оператора или конструктора или чего-то еще?
Это потому, что 'operator()', да. См. [Здесь] (http://stackoverflow.com/questions/356950/c-functors-and-their-uses). Кроме того, «вызываемые объекты» в этом контексте также являются функциями, указателями функций и лямбда-функциями. – jrok
Это перегруженный 'operator()'. Он позволяет вызывать экземпляр этого класса как функцию. Они называются * functors *, * объектами функции *, * вызываемыми объектами * и т. Д. – Simple
Вы должны пометить (и назвать) этот вопрос с помощью boost. Boost - это не стандартная библиотека C++, поэтому очень большое сообщество поддержки здесь может быстрее поднять это значение, если вы отметили его и назвали правильно. – Xoorath