「モダンC++」(C++ 17以降)で、パラメーターとして文字列リテラルをC++テンプレートに渡すことは可能ですか?
コンストラクター引数を使用してこれを実行できることを理解しています。 cppファイルの奥深くに埋めるよりも、テンプレート引数として使用する方が便利だと思いました。多分これが現代のC++の新機能であるかどうか興味がありました。私がやろうとしていることの以下の擬似コードを参照してください:
擬似コードの例:
// Header File /////////////////////////
template<constexpr string Name>
class ModuleBase {
public:
ModuleBase();
string name;
};
class xyz : ModuleBase<"xyz"> {
public:
xyz();
};
// Cpp File //////////////////////////
template<string_literal Name>
ModuleBase<Name>::ModuleBase() {
name = Name;
}
xyz::xyz() : ModuleBase() {
}
はい、 c ++ 2 で。
問題は、テンプレートの非型引数の一意性を判断することが難しいことでした。
c ++ 2<=>
宇宙船オペレーターの比較。ユーザーが提供しない場合(およびユーザーが提供しない場合のみに基づく<=>
順番に、再帰的に繰り返します(および 他の要件はほとんどありません。p0732 を参照)。この型は、非型テンプレート引数として使用できます。
このような型は、未加工の"strings"
constexpr
コンストラクターで、 c ++ 17 推論ガイドを使用して、自動サイズ調整を行うことを含みます。
格納されるデータのサイズはおそらく型の一部になるので、型を auto
typed non-type parameter またはそうでなければ自動推論する必要があります。タイプ。
テンプレートの実装をcppファイルに配置することは、通常は悪い考えです。しかし、それは別の質問です。