Warum wurde unary_function, binary_function aus C ++ 11 entfernt?

8

Ich habe festgestellt, dass binary_function aus C ++ 11 entfernt wurde. Ich frage mich warum.

C ++ 98:

%Vor%

C ++ 11:

%Vor%

MODIFIZIERT --------------------------------------- -------------------------------------

%Vor%

Wenn wir beispielsweise unseren Adapter für die Funktion selbst in C ++ 98 schreiben möchten,

%Vor%

Wie können wir das in C ++ 11 ohne unary_function verbessern?

    
camino 13.03.2014, 17:51
quelle

2 Antworten

10
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstnhdr ___ Warum wurde unary_function, binary_function aus C ++ 11 entfernt? ___ antwort22387805 ___

Es wird nicht entfernt, es ist nur in C ++ 11 veraltet. Es ist immer noch Teil des C ++ 11-Standards. Sie können es immer noch in Ihrem eigenen Code verwenden. (Edit: Das Komitee stimmte kürzlich dafür, es aus C ++ 17 zu entfernen.)

Es wird nicht mehr im Standard verwendet, da Implementierungen, die von binary_function abgeleitet werden müssen, überspezifiziert sind.

Benutzern sollte es egal sein, ob less von binary_function abgeleitet ist, sie müssen nur darauf achten, dass sie first_argument_type , second_argument_type und result_type definiert. Es sollte von der Implementierung abhängen, wie es diese Typedefs bereitstellt.

Das Erzwingen, dass die Implementierung von einem bestimmten Typ abgeleitet wird, bedeutet, dass sich Benutzer möglicherweise auf diese Ableitung verlassen, was sinnlos und nicht sinnvoll ist.

Bearbeiten

  

Wie können wir das in C ++ 11 ohne unary_function verbessern?

Sie brauchen es nicht.

%Vor%

Tatsächlich können Sie es noch besser machen, siehe not_fn : ein verallgemeinerter Negator

    
___ antwort22387006 ___

Mit variadischen Vorlagen lassen sich viele allgemeine Funktionszusammenstellungen viel einfacher und konsistenter ausdrücken, so dass der alte Kram nicht mehr notwendig ist:

Verwenden Sie:

  • %code%
  • %code%
  • %code%
  • %code%
  • lambdas

Nicht verwenden:

  • %code% , %code%
  • %code%
  • %code% , %code%
___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen in der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ tag123stl ___ Die Standardvorlagenbibliothek (STL) ist eine C ++ - Bibliothek mit generischen Containern, Iteratoren, Algorithmen und Funktionsobjekten. Als C ++ standardisiert wurde, wurden große Teile der STL in die Standardbibliothek übernommen, und diese Teile in der Standardbibliothek werden manchmal auch zusammen als "die STL" bezeichnet. ___ tag123functor ___ Der Begriff 'Funktor' hat zwei allgemeine Bedeutungen: 1. Funktionsobjekt. In objektorientierten Sprachen ist es eine Funktion, die es ermöglicht, Objekte wie normale Funktionen zu verwenden. 2. Eine mathematische Struktur, die sich mit Abbildungen zwischen Kategorien beschäftigt. Dieses Konzept ist eine nützliche Abstraktion in einigen Programmiersprachen, insbesondere in Haskell, wo es als Typklasse implementiert ist. ___ tag123unaryfunction ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Ich habe festgestellt, dass %code% aus C ++ 11 entfernt wurde. Ich frage mich warum.

C ++ 98:

%Vor%

C ++ 11:

%Vor%

MODIFIZIERT --------------------------------------- -------------------------------------

%Vor%

Wenn wir beispielsweise unseren Adapter für die Funktion selbst in C ++ 98 schreiben möchten,

%Vor%

Wie können wir das in C ++ 11 ohne %code% verbessern?

    
___
Jonathan Wakely 13.03.2014, 18:32
quelle
12
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstnhdr ___ Warum wurde unary_function, binary_function aus C ++ 11 entfernt? ___ antwort22387805 ___

Es wird nicht entfernt, es ist nur in C ++ 11 veraltet. Es ist immer noch Teil des C ++ 11-Standards. Sie können es immer noch in Ihrem eigenen Code verwenden. (Edit: Das Komitee stimmte kürzlich dafür, es aus C ++ 17 zu entfernen.)

Es wird nicht mehr im Standard verwendet, da Implementierungen, die von std::function abgeleitet werden müssen, überspezifiziert sind.

Benutzern sollte es egal sein, ob std::bind von std::mem_fn abgeleitet ist, sie müssen nur darauf achten, dass sie std::result_of , std::unary_function und std::binary_function definiert. Es sollte von der Implementierung abhängen, wie es diese Typedefs bereitstellt.

Das Erzwingen, dass die Implementierung von einem bestimmten Typ abgeleitet wird, bedeutet, dass sich Benutzer möglicherweise auf diese Ableitung verlassen, was sinnlos und nicht sinnvoll ist.

Bearbeiten

  

Wie können wir das in C ++ 11 ohne unary_function verbessern?

Sie brauchen es nicht.

%Vor%

Tatsächlich können Sie es noch besser machen, siehe std::mem_fun : ein verallgemeinerter Negator

    
___ antwort22387006 ___

Mit variadischen Vorlagen lassen sich viele allgemeine Funktionszusammenstellungen viel einfacher und konsistenter ausdrücken, so dass der alte Kram nicht mehr notwendig ist:

Verwenden Sie:

  • std::bind1st
  • std::bind2nd
  • %code%
  • %code%
  • lambdas

Nicht verwenden:

  • %code% , %code%
  • %code%
  • %code% , %code%
___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen in der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ tag123stl ___ Die Standardvorlagenbibliothek (STL) ist eine C ++ - Bibliothek mit generischen Containern, Iteratoren, Algorithmen und Funktionsobjekten. Als C ++ standardisiert wurde, wurden große Teile der STL in die Standardbibliothek übernommen, und diese Teile in der Standardbibliothek werden manchmal auch zusammen als "die STL" bezeichnet. ___ tag123functor ___ Der Begriff 'Funktor' hat zwei allgemeine Bedeutungen: 1. Funktionsobjekt. In objektorientierten Sprachen ist es eine Funktion, die es ermöglicht, Objekte wie normale Funktionen zu verwenden. 2. Eine mathematische Struktur, die sich mit Abbildungen zwischen Kategorien beschäftigt. Dieses Konzept ist eine nützliche Abstraktion in einigen Programmiersprachen, insbesondere in Haskell, wo es als Typklasse implementiert ist. ___ tag123unaryfunction ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Ich habe festgestellt, dass %code% aus C ++ 11 entfernt wurde. Ich frage mich warum.

C ++ 98:

%Vor%

C ++ 11:

%Vor%

MODIFIZIERT --------------------------------------- -------------------------------------

%Vor%

Wenn wir beispielsweise unseren Adapter für die Funktion selbst in C ++ 98 schreiben möchten,

%Vor%

Wie können wir das in C ++ 11 ohne %code% verbessern?

    
___
Kerrek SB 13.03.2014 17:57
quelle