2016-06-13 8 views
2
#include <vector> 
#include <functional> 

int main(int argc, char** argc) 
{ 
    std::vector<int> x; 
    std::function<void (void)> f(std::allocator_arg,x.get_allocator()); 
    return 1; 
} 

Verwendung: g++ test.cpp -o test -std=c++11
Er scheiterte an Ubuntu 15, mein g++ version is 5.2.1. es ist alles ok auf XCode und VS2015. und ich überprüfe /usr/include/c++/5/functional, es hat keinen Konstruktor für Zuweiser. Ich überprüfe www.cplusplus.com, und es definiert den Konstruktor mit Zuordner.
Jemand kann mir sagen, wie dieses Problem zu beheben, oder ich muss die g ++ STL ändern, Wie g ++ STL mit anderen STL ändern? Ich habe sgi stl Quellcodes heruntergeladen.
Bitte helfen! Danke vielmals .Warum unterstützt g ++ keine Funktion mit Allokator-Konstruktor auf Ubuntu?

+0

'allocator_arg' ist eine Konstante - Ihr Code macht keinen Sinn mehr als' std :: function f (PI); '. –

+1

Bis GCC 6.1.0, 'std :: function' mit Zuweiser wird immer noch nicht unterstützt, die Quelle hat Kommentar' // TODO: braucht allocator_arg_t' – Mine

+0

vielen Dank. Ich gebe mit Zuordner ~ auf – NeoLiu

Antwort

2

Die Verwendung von Allokator in std::function hat viele Probleme.

What's the point of std::function constructor with custom allocator but no other args?

http://cplusplus.github.io/LWG/lwg-closed.html#2386

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0302r0.html

im Blick g ++ functional Quelle, es offensichtlich nicht Gebrauch jegliche allocator construct für die dynamische Zuordnung machen, verwendet es deutlich new und delete.

Also, ich bin mir nicht sicher, wie Sie Ihren Allokator die Heap-Zuweisung bereitstellen können. Aber eine schlechte Idee ist, von function abzuleiten und den Operator new und delete zu überlasten. Ich würde vorschlagen, dass Sie NICHT auf diesen Pfad gehen. Es ist eine sehr sehr BAD Idee.

Verwandte Themen