単一(float
)またはdouble
の精度を使用するようにテンプレート化された一連の関数とクラスがあるとします。もちろん、ブートストラップコードを2つだけ書くことも、マクロを混乱させることもできます。しかし、私は実行時にテンプレート引数を切り替えることはできますか?C++で実行時にテンプレート引数を選択
8
A
答えて
19
いいえ、実行時にテンプレート引数を切り替えることはできません。テンプレートはコンパイル時にコンパイラによってインスタンス化されるためです。あなたはが両方のテンプレートは、共通の基本クラスから派生し、常にあなたのコード内で基本クラスを使用して、実行時に使用するクラスを派生かを決定しているされて何ができるか:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
マクロは同じ問題を抱えていますコンパイル時に展開されるという点で、
3
テンプレートはコンパイル時のメカニズムです。ところで、マクロも同様です(厳密に言えば - 前処理メカニズム - これはコンパイル前でもあります)。
2
テンプレートはまったくコンパイル時の構造であり、コンパイラはテンプレートを展開し、指定された引数でクラス/関数を作成し、直接コードに変換します。
実行時にfoo<float>
とfoo<double>
の間で切り替えようとすると、いくつかのメタプログラミングトリッキーを使用するか、それぞれに別々のコードパスが必要になります。
関連する問題
- 1. 複数選択ctrl +ボタン実行時に
- 2. 実行時にGridExの行を選択
- 3. C#プロジェクトで実行時に接続文字列を選択
- 4. を選択し、デフォルト値、実行時に
- 5. 実行時にテーブルアダプタを選択
- 6. PHP - 実行時に関数を選択する
- 7. "実行時のテンプレート"
- 8. 実行前の実行時にワークフロー引数を決定する
- 9. 実行時に選択ボックス内のオプションを変更して別の選択ボックスでオプションを選択する
- 10. C++推論テンプレート引数
- 11. は、実行時にプログラムでスタイル/テーマを選択する
- 12. LINQ - 型引数は、選択
- 13. C#linq - 実行時に選択したフィールドを変更します。
- 14. 実行時にinstallerpluginのInstallerpaneを選択的に表示
- 15. C++テンプレートでの引数の省略
- 16. ビルドプロセスでビルドタスクを選択的に実行
- 17. knockout.js実行時にテンプレートをロードする
- 18. 実行時に複数のコントロールを選択して移動する方法
- 19. XSLTテンプレートを選択
- 20. フォーム送信時に選択機能を実行する
- 21. 実行時にタブページを選択する方法
- 22. 実行時にAjaxと完全なポストバックを選択する
- 23. LINQ実行時に照会するテーブルを選択する
- 24. 実行時にリンクするライブラリを選択する
- 25. 関数テンプレートのデフォルト引数C++
- 26. C++クラステンプレートがテンプレートです:テンプレート引数が無効です
- 27. テンプレート関数のテンプレート引数
- 28. C#で実行中のプロセスに引数を渡す
- 29. T4テンプレート - SubSonic 3 - ビルド時に実行
- 30. 実行時にテンプレートのようなベースクラスのタイプを選択してください