ライブラリを自分のクラスデザインにラッピングしています。私は、クラスのコンストラクタのライブラリで提供されるunsigned int非型パラメータを持つテンプレートメソッドを呼びたいと思います。非形式のテンプレート引数ソースファイル内の明示的なインスタンス化
#include <iostream>
#include <bar.h> // template header in here
class foo {
foo(unsigned num) {
BAR<num>(); // a template method BAR inside "bar.h"
}
};
私はこれで対処しようとすると、非タイプのパラメータがconstexprであるようです。したがって、上記のコードは、関数呼び出しの中にconstエラーがあることを示すエラーを生成します。
私はfooクラスをクラステンプレートにして、このunsigned non-typeパラメータをfooのテンプレート引数パラメータに渡すことにしました。
#include <iostream>
#include <bar.h> // template header in here
template <unsigned num>
class foo {
foo() {
BAR<num>(); // a template method BAR inside "bar.h"
}
};
これはうまくいくようです。しかし、ヘッダーとソースファイルを別々の.hpp/.cppファイルに分けたいと思います。 this threadによると、.cppソースファイル内にテンプレート実装を配置する場合、.cppファイルの最後にすべてのテンプレート引数を明示的にインスタンス化する必要があります。符号なし整数のような非型パラメータの場合、それは、すべての符号なし数値オブジェクトに対してテンプレートを利用できるようにするために、何千もの可能な符号なし整数をインスタンス化する必要があるということですか?助けてくれてありがとう。
テンプレート引数として非型を使用したい場合は、テンプレート実装を公開する必要がありますか? – yc2986
はい私はそう信じている – grigor
私はまだ実装を分離したい。この場合、constexprをコンストラクタのパラメータとして渡す別の方法はありますか? – yc2986