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
C'est la surcharge
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.
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
Vous devez vous connecter pour publier un commentaire.
Un objet appelable est quelque chose qui peut être appelée comme une fonction, avec la syntaxe
object()
ouobject(args)
; c'est, d'un pointeur de fonction, ou un objet d'un type de classe que les surchargesoperator()
.La surcharge de
operator()
dans votre classe rend exigible.OriginalL'auteur Mike Seymour
Un objet qui a au moins une surcharge
operator()
est un objet appelable, et à l'opérateur, ainsi que son objet ne peut être invoquée comme fonction de l'invocation:operator()
est un objet appelable -- je ne suis pas certian que l'inverse est vrai.Oui, et j'ai dit "Un objet ... est un objet appelable" pas dans le sens inverse.
vous avez raison: "objet appelable" comprend pointeur de membre. Les choses qui peuvent être appelées avec une liste d'arguments entre parenthèses sont des objets de fonction.
moderne et efficace de c++,1ère édition,cinq de l'impression ou de la bibliothèque c++ standard,deuxième édition,3e imprimer
OriginalL'auteur deepmax
Il y a deux étapes ici. Dans la Norme C++, une fonction "objet" est un objet qui peut apparaître sur le côté gauche, d'une mise entre parenthèses de la liste d'arguments, j'.e, un pointeur vers la fonction ou un objet dont le type a un ou plusieurs
operator()
s. Le terme "objet appelable" est plus large: il comprend aussi des pointeurs vers les membres (qui ne peut pas être appelé avec la fonction normale de syntaxe d'appel). Callable les objets sont des choses qui peuvent être transmis àstd::bind
etc. Voir 20.8.1 [func.def] et de 20,8[function.objets]/1.OriginalL'auteur Pete Becker
Un objet appelable est un objet instance d'une classe avec
operator()
surchargé:ou un déréférencé-pointeur de fonction:
C'est pourquoi la réponse dit "une fonction pointeur", pas de "fonction". Peut-être le commentaire de code pourrait être plus précis, par exemple "func convertit un objet appelable".
changé commentaire pour être plus précis, merci
En effet, pointeur de fonction est un objet, mais elle n'est pas exigible. En fait, un déréférencé-la fonction de pointeur est appelable, de l'OMI. Suis-je le droit?
un pointeur de fonction est appelable:
f(3)
. Ne pas entrer dans les détails de savoir si un pointeur de fonction doit être déréférencés.(*******f)(3)
, oùf
est un pointeur de fonction, est valide.OriginalL'auteur Paul Evans
Depuis C++17, un objet Appelable est en fait défini par la norme; voir http://en.cppreference.com/w/cpp/concept/Callable pour plus de détails.
OriginalL'auteur Carlo Wood
Objet de fonction de membre ajouter des pointeurs de fonction des rendements de ce que l'on appelle "callable" des objets.
Quand nous en c++ 98/03,nous utilisons la classe de remplacer l'opérateur() en tant que fonction.En général, nous appelons cela une fonction de classe.Il a l'avantage de stocker l'état de la fonction et de l'autre fonction ne peut pas.Donc, c'est le concept le plus important.Et de la frontière, nous appelons ce style de fonction de classe et d'autres c le style de la fonction, et un pointeur de type c de la fonction "fonction d'objet".
L'objet appelable est juste "callable" objet. Il incluent la fonction de l'objet et de membre des pointeurs de fonction.
OriginalL'auteur Tu Xiaomi