Was würdet ihr an C++ verbessern?
-
SideWinder schrieb:
F12 scheint eher eine Art "Go to definition" zu sein.
Exakt, bei mir funktioniert das eigentlich praktisch immer einwandfrei, auch mit Templates...
SideWinder schrieb:
Ich habe aber davon geredet eine Methode im Projekt bzw. zumindest im derzeitigen File zu suchen.
Dann könnte das Class View was für dich sein (Ctrl + Shift + C, das gibts auch schon seit maximal VC6 und damit seit über 10 Jahren)...
-
@dot: Dort ist aber wieder die Usability furchtbar. Nicht einmal der Fokus ist nach CTRL+SHIFT+C im Search-Feld, das heißt ich muss tatsächlich nochmal die Maus benutzen, da es nichtmal via Tab erreichbar ist. Alles in allem hilft wohl nur VAX wie Artchi bereits gesagt hat. Wer einmal längere Zeit mit Eclipse gearbeitet hat (für Java) findet Visual Studio eigentlich nicht mehr sonderlich beeindruckend. Eher enttäuschend.
MfG SideWinder
-
SideWinder schrieb:
Wer einmal längere Zeit mit Eclipse gearbeitet hat (für Java) findet Visual Studio eigentlich nicht mehr sonderlich beeindruckend.
Visual Studio für C++ vielleicht. Im C#-Modus ist es richtig gut
-
SideWinder schrieb:
Wer einmal längere Zeit mit Eclipse gearbeitet hat (für Java) findet Visual Studio eigentlich nicht mehr sonderlich beeindruckend.
Da muss ich widersprechen. Wann immer ich zwangsweise mit Eclipse gearbeitet hab (was zugegeben noch nicht so oft war, aber jedesmal Java ist einmal zu oft wenn du mich fragst) war ich heilfroh wenn ich wieder eine vernünftige IDE verwenden konnte. Aber das ist wohl stark Geschmackssache...und abgesehen davon sollte man eine C++ IDE wenn dan mit einer anderen C++ IDE vergleichen
-
GPC schrieb:
SideWinder schrieb:
Wer einmal längere Zeit mit Eclipse gearbeitet hat (für Java) findet Visual Studio eigentlich nicht mehr sonderlich beeindruckend.
Visual Studio für C++ vielleicht. Im C#-Modus ist es richtig gut
Ja, das habe ich mittlerweile auch mitgekriegt. Es scheint einfach Probleme mit C++ als Sprache zu geben um eine wunderbare IDE zu erstellen (bzw. man will VAX nicht ins Geschäft pfuschen?).
Alleine das Project Property Sheet ist ja aus Usability-Sicht nicht zu fassen. Additional Dependencies für den Linker sind in einer sehr interessanten 90er-Box hinzuzufügen. Wenn man sich da das hinzufügen von Libraries in Eclipse ansieht oder "References" im C#-Mode...
Aber das soll ja ein Thread über C++ werden. Ich hör' dann mal auf
MfG SideWinder
-
Gibt es jetzt eigentlich für C++ irgendeine Art Maven-Package-System mit Dependency-Resolution?
MfG SideWinder
-
SideWinder schrieb:
Gibt es jetzt eigentlich für C++ irgendeine Art Maven-Package-System mit Dependency-Resolution?
MfG SideWinder
Theoretisch jedes BSD/Linux Packaging.
Kenne mich mit Linux nicht aus, aber unter FreeBSD ist das jedenfalls out-of-box dabei, mittels Makefiles.
Das FreeBSD System löst die Abhängigkeiten auf, lädt notfalls fehlende (Source-)Libs von den Servern und baut das Projekt.
Wäre aber natürlich ein allgemeineres System nötig, das man z.B. auch mit dem Windows SDK nutzen könnte. Also in dem speziellen Fall nicht.
Eigentlich muß man ja die bestehen Tools wie bjam und SCons nur noch erweitern, weil die können ja schon Dependencies auflösen, nur halt noch nicht fehlende Libs von einem Server "besorgen". Aber auch das würde nicht alles lösen, weil du brauchst auch eine Community, die das pflegt. Und in Firmen muss sich da auch jemand drum kümmern. Mann kann hier höchstens der C++ Community einen Vorwurf machen, aber nicht der Sprache selbst.
Aber was hat das alles mit der C++ Sprache zu tun? Das sind alles nur entfernte Tools, die man für jede Sprache entwickeln kann. Finde die Diskussion ziemlich sinnlos, in diesem Thread, da es um C++ als Sprache geht.
-
SideWinder schrieb:
Ja, das habe ich mittlerweile auch mitgekriegt. Es scheint einfach Probleme mit C++ als Sprache zu geben um eine wunderbare IDE zu erstellen (bzw. man will VAX nicht ins Geschäft pfuschen?).
Wieso Sprache? Mag sein, das dir VC nicht gefällt, aber das ist eine IDE und keine Sprache. Ganz davon abgesehen, das VAX beweist, das deine Aussage nicht auf C++ zutrifft. Wer zu geizig oder arm ist, 49 US$ für VAX auszugeben... hat Pech.
-
Ich meinte "Probleme bei Microsoft mit C++". Deswegen auch dann der Text in der Klammer. Möglich wäre es ja, aber offenbar tut man sich bei Microsoft weit weniger an um eine gute IDE für C++ zu erstellen als bspw. für C#.
MfG SideWinder
-
SideWinder schrieb:
Möglich wäre es ja, aber offenbar tut man sich bei Microsoft weit weniger an um eine gute IDE für C++ zu erstellen als bspw. für C#.
http://channel9.msdn.com/Shows/Going+Deep/Craig-Symonds-and-Mohsen-Agsen-C-Renaissance
Abgesehen davon wirst du sicherlich nicht bestreiten dass z.B. der VC++ Debugger mit großem Abstand der Beste native Debugger ist dens gibt...
-
Der Debugger soll mal Ausdrücke auswerten können und nicht ständig meckern und wenn ich einen Zeiger angebe und das ein Array ist, soll der das selbstständig kapieren und mir die Arraywerte und nicht nur den erste zurückgeben (oder man sollte das via Schlüsselwort oder [] hinter Variablennamen im Überwachungsfenster erzwingen können).
Aber geht ja nicht um MSVC++ hier
-
Eisflamme schrieb:
Der Debugger soll mal Ausdrücke auswerten können und nicht ständig meckern und wenn ich einen Zeiger angebe und das ein Array ist, soll der das selbstständig kapieren und mir die Arraywerte und nicht nur den erste zurückgeben (oder man sollte das via Schlüsselwort oder [] hinter Variablennamen im Überwachungsfenster erzwingen können).
Das geht doch alles, es gibt afaik sogar ne Möglichkeit die Anzeige im Watch Window per Skript für deine eigenen Typen zu erweitern (wie das z.B. die die std Container gemacht ist)
-
off topic geworden.
Noch eine verbesserung ist mir eingefallen.
template<typename tDerived> class Foo { // implementation }; class MyFoo : public Foo<MyFoo> { // leer }; // instance bilden MyFoo my_instance; // // Es soll möglich sein das der Compiler // die MyFoo Klasse automatisch definiert // // folgender masse Foo<identity> my_instance; // das gleiche wie "MyFoo my_instance;" // der Bezeichner identity ist ein möglicher Schlüsselwort(Keyword) // my_instance ist eine variable von unbenannten Type(MyFoo) den der Compiler erstellt hat.
-
Was soll das bringen, wenn
Foo<identity>
das gleiche wieMyFoo
bedeutet?MyFoo
ist ja nicht nur irgendeine Instanziierung desFoo
-Templates, sondern eine davon abgeleitete Klasse.Oder kannst du das etwas genauer erklären, am besten mit einem Anwendungsfall?
-
template<typename tDerived> class Window { Window(Window* parent, ...) {} void (tDerived::*onClick)(); }; // diese Klasse muss Du erstellen. // die Klasse kannst du nicht als Basis Klasse verwenden // sonst würde onClick member function pointer // Probleme machen. // diese Klasse ist nur für einen Zweck da um Objekte zu erstellen class MyWindow : public Window<MyWindow> { MyWindow(Window* parent, ...) : Window<MyWindow>(parent, ...) {} }; // verwendung int main() { MyWindow obj; // oder so, was besser ist Window<identity> obj; }
-
Warum muss diese Klasse erstellt werden?
Warum kann man sie nicht als Basisklasse verwenden?
Warum würdeOnClick
Member-Function-Pointer Probleme machen?Und inwiefern hilft nun dabei dieses
Window<identity>
, welches du bis jetzt nicht wirklich erklärt hast, was es machen soll.Grüssli
-
Ich versuche es zu verdeutlichen.
class Window { Window(Window* parent, ...) {} }; template<typename tDerived> class WindowImpl : public Window { WindowImpl<tDerived>(Window* parent, ...) : Window(parent, ...) {} void (tDerived::*onClick)(); }; class MyWindow : public WindowImpl<MyWindow> { MyWindow(Window* parent, ...) : WindowImpl<MyWindow>(parent, ...) {} };
Dravere schrieb:
Warum muss diese Klasse erstellt werden?
Bedenke dass der template type parammeter von Klasse "WindowImpl", eine Abgeleitete Klasse sein muss.
Dravere schrieb:
Warum kann man sie nicht als Basisklasse verwenden?
Warum würdeOnClick
Member-Function-Pointer Probleme machen?class FrameWindow : public MyWindow { FrameWindow(Window* parent, ...) : Window(parent, ...) { // error type not compatibel onClick = &FrameWindow::this_Click; } // error uns fellt der template parammeter // wenn wir FrameWindow nehmen kommt es in der Abgeleiteten Klasse // zu Fehlern siehe onClick void (???::*onDoubleClick)(); void this_Click() {} };
Dravere schrieb:
Und inwiefern hilft nun dabei dieses
Window<identity>
, welches du bis jetzt nicht wirklich erklärt hast, was es machen soll.Grüssli
der Compiler soll uns die Fehlende Klasse definieren
class Window { Window(Window* parent, ...) {} }; template<typename tDerived> class WindowImpl : public Window { WindowImpl<tDerived>(Window* parent, ...) : Window(parent, ...) {} void (tDerived::*onClick)(); }; int main() { WindowImpl<identity> win; }
aus dem Oberen Quelltext erstellt uns der Compiler
class Window { Window(Window* parent, ...) {} }; template<typename tDerived> class WindowImpl : public Window { WindowImpl<tDerived>(Window* parent, ...) : Window(parent, ...) {} void (tDerived::*onClick)(); }; // achtung Compiler generierter Code class unique_123456789 : public WindowImpl<unique_123456789> { unique_123456789() : WindowImpl<unique_123456789>(Window* parent, ...) {} }; int main() { // unique_123456789 alias WindowImpl<identity> unique_123456789 win; }
-
dot schrieb:
Eisflamme schrieb:
Der Debugger soll mal Ausdrücke auswerten können und nicht ständig meckern und wenn ich einen Zeiger angebe und das ein Array ist, soll der das selbstständig kapieren und mir die Arraywerte und nicht nur den erste zurückgeben (oder man sollte das via Schlüsselwort oder [] hinter Variablennamen im Überwachungsfenster erzwingen können).
Das geht doch alles, es gibt afaik sogar ne Möglichkeit die Anzeige im Watch Window per Skript für deine eigenen Typen zu erweitern (wie das z.B. die die std Container gemacht ist)
Wie das geht?
Wenn in meinem Code irgendwo bla* steht und sich dahinter ein Array verbirgt und ich bla als überwachte Variable eingebe, dann gibt er mir nur den ersten Wert.
-
@Ramsis,
Du redest wirres Zeug ...
Warum muss der Templateparemeter vonWindowImpl
eine abgeleitete Klasse sein? Das ist doch überhaupt gar nicht zwingend.Meine beiden weiteren Fragen hast du mit dem Code auch nicht beantwortet. Ich habe nicht gefragt, wieso man einen Templateparameter braucht, sondern warum man sie nicht als Basisklasse verwenden kann wegen des Member-Function-Pointer.
Deine Aussagen sind irgendwie völlig zusammenhangslos. Ich weiss nicht mal was ich fragen soll, um da Licht ins Dunkle zu bringen, das ist so wirres Zeug. Vielleicht solltest du weiter ausholen, was du eigentlich machen möchtest. Vielleicht auch weniger Code hinschreiben dafür mehr Text und erklären, um was es dir geht.
Grüssli
-
Eisflamme schrieb:
Wenn in meinem Code irgendwo bla* steht und sich dahinter ein Array verbirgt und ich bla als überwachte Variable eingebe, dann gibt er mir nur den ersten Wert.
Dann schreib mal bla,100 dann interpretiert er den Wert als Zeiger auf ein Array auf 100 Elementen