Ich habe ein paar Zeilen, die gut auf meinem System kompilieren, aber nicht auf einem Kollegen-System kompilieren. Deshalb möchte ich fragen, wie die Go-to-Lösung für das Problem aussehen würde. Ich muss mit einer enum
umgehen, die implizit definiert, wie viel Platz ich für eine bereitstellen muss. Andere Teile des Codes verwenden auch FooSize
als statisch. (Optimierung)Initialisiere ein statisches Konst-Mitglied mit einem Template-Argument
Meine aktuelle Implementierung sieht wie folgt aus
enum class FooType
{
ShortFoo,
LongFoo
};
// defined in a different file
template <FooType FType>
class FooContainer
{
public:
static const unsigned int FooSize {(FType == FooType::ShortFoo) ? 32 : 64 };
std::array<float, FooSize> fooArray;
};
Der Code scheint Probleme auf älteren llvm/Klirren Compiler zu erstellen. 32
und 64
werden eigentlich über Pre-Prozessor definiert. Ich könnte einfach die FooType
überspringen und die Größe als Vorlage Argument verwenden, aber ich würde gerne wissen, was die zuverlässigste Methode der Initialisierung FooSize
wäre.
Wie ältere Klirren Compiler verwandeln werden? Sie unterstützen C++ 11? (Enum-Klassen und 'std :: array' sind C++ 11-Funktionen). Und, bitte, können Sie den genauen Fehler transkribieren? – max66
LLVM 5.1, so ist es XCode 5.1.1. Wir benutzen C++ 11, was ein bisschen seltsam ist. (Wäre nicht so, dass ein Compiler, der sich darüber beschwert, C++ 11 unterstützen würde) Fehler: 'In-Class-Initialisierer für statische Datenmitglieder ist kein konstanter Ausdruck –