Qu'est ce qu'un objet appelable en C++?

Je suis actuellement étudiant stimuler les threads. Et je suis tombé sur le thread de la classe a un constructeur qui accepte appelable objets. Ce sont remboursables objets?

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
}
}
};

Comment est-ce devenu un objet appelable? C'est à cause de l'opérateur surchargé ou le constructeur ou autre chose?

C'est parce que operator(), oui. Voir ici. En plus de "callable objets" dans ce contexte sont aussi, les fonctions, les pointeurs de fonction et les lambda fonctions.
C'est la surcharge operator(). Il vous permet d'appeler une instance de cette classe comme une fonction. Ils sont appelés les foncteurs, la fonction des objets, appelable objets, etc.
Vous devriez tag (et le nom) de cette question avec le coup de pouce. Boost n'est pas une bibliothèque C++ standard, de sorte que la très forte poussée de la communauté pourrait être en mesure de choisir ce plus vite si vous avez balisé et l'a nommé correctement.

OriginalL'auteur Xegara | 2013-10-09

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *