[解決済み] C++のテンプレートはチューリングコンプリートか?
2022-08-16 18:10:27
質問
C++のテンプレートシステムは、コンパイル時にチューリング完全であると聞いています。このことは この投稿 で、また ウィキペディア .
この性質を利用した計算の自明でない例を提示してください。
この事実は実際に有用ですか?
どのように解決するのですか?
例
#include <iostream>
template <int N> struct Factorial
{
enum { val = Factorial<N-1>::val * N };
};
template<>
struct Factorial<0>
{
enum { val = 1 };
};
int main()
{
// Note this value is generated at compile time.
// Also note that most compilers have a limit on the depth of the recursion available.
std::cout << Factorial<4>::val << "\n";
}
ちょっと面白かったけど、あまり実用的じゃないね。
質問の後半にお答えします。
この事実は実際に役に立つのでしょうか?
短い答えです。多少は。
長い答え はい、ただし、あなたがテンプレートデーモンである場合に限ります。
他の人が使うのに本当に役に立つテンプレートメタ・プログラミング(つまりライブラリ)を使って良いプログラミングを生み出すことは、(可能ではありますが)本当に大変なことです。ブーストを助けるために、さらに MPL というメタ・プログラミング・ライブラリがあります。しかし、テンプレートコードのコンパイラーエラーをデバッグしようとすると、長い間大変な思いをすることになります。
しかし、何か役に立つことに使われている良い実用例があります。
Scott Meyers はテンプレート機能を使用して C++ 言語 (私はこの用語を大まかに使用しています) の拡張を行なっています。彼の仕事については、ここで読むことができます。 コードの機能を強制する '
関連
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] テンプレートにおける'typename'と'class'の違い?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] チューリングコンプリートとは?
-
[解決済み] CSSチューリングは完全か?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] C++とJavaの「汎用」型の違いは何ですか?