タグ付けされた質問 「compile-time-constant」

13
Java switchステートメント:定数式が必要ですが、定数です
だから、私はいくつかの静的定数を持つこのクラスに取り組んでいます: public abstract class Foo { ... public static final int BAR; public static final int BAZ; public static final int BAM; ... } 次に、定数に基づいて関連する文字列を取得する方法を教えてください。 public static String lookup(int constant) { switch (constant) { case Foo.BAR: return "bar"; case Foo.BAZ: return "baz"; case Foo.BAM: return "bam"; default: return "unknown"; } …

5
テンプレートクラスを生成するためのforループにconst変数を含めるにはどうすればよいですか?
私のようなコードがあります template <size_t N> class A { template <size_t N> someFunctions() {}; }; 次に、クラスのインスタンスを作成し、そのような関数をforループで呼び出して、次のような多くの値のセットを取得します // in main() int main() { for (int i = 1; i <= 100; i++) { const int N = i; // dont know how to do this A<N> a; a.functionCalls(); } } これを行う方法?これを行う方法を期待しています。

1
constexprコンストラクターで配列を初期化することは正当ですか?
次のコードは正当ですか? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clangはそれを受け入れますが、GCCとMSVCはそれを拒否します。 GCCのエラーは次のとおりです。 main.cpp:15:18: error: 'constexpr foo<N>::foo() [with int N = 5]' called in a constant expression 15 …

1
時間テキストをコンパイルして数値変換する(atoi)
コンパイル時にatoi()関数を実装したい(C ++ 11またはC ++ 14標準を使用して、C ++言語で)。したがって、二重引用符で囲まれたテキストを数値として解析したり、エラーを再現したりできます。より具体的には、それはコンパイル時にprintfのような形式を解析できるより大きなシステムの一部です。そして、私は単語のフォーマット文字列を分割し、特定の単語を数字で表すことができる場合は、文字列ではなく番号を出力します(シーンの背後にあるシリアライザクラスは、文字列よりも数値をより効率的にシリアル化できます。重要なのは、デシリアライザはすべての文字列を数値として解析しようとしないことです。これは、フォーマット文字列内に出力されるすべての数値は常に数値として表現され、文字列としては表現されないためです...) 私が2つ知っているように、タスクを解決するには2つの方法があります。 1)constexpr関数を使用する。 2)テンプレートのメタプログラミング。 どっちがいいの?私は最初の方法を試しましたが、この方法には多くの障害があることがわかります。特に、c ++ 11に関連するいくつかの制限があります。2番目のように見えるかもしれませんが、いくつかのトリックが必要です(c ++ 14から始まるgccおよびc ++ 11から始まるclangでサポートされている、演算子 ""を使用して文字列を分割して文字を分離する必要があります。 )。また、完全にTMPに基づくソリューションは、大きすぎて複雑すぎます。 以下は私の解決策です、私はそれについていくつかの提案を聞いてうれしいです。 http://coliru.stacked-crooked.com/a/0b8f1fae9d9b714b #include <stdio.h> template <typename T> struct Result { T value; bool valid; constexpr Result(T v) : value(v), valid(true) {} constexpr Result() : value(), valid(false) {} }; template <typename T> constexpr …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.