私はC++を学んでいます。私は使用されているConfigurationオブジェクトに応じて、ある方法または別の方法で動作するClassroomクラスを持っています。このような教室オブジェクトを作成するときに、私はコンストラクタでそのConfigurationオブジェクトを渡すことができます。テンプレート引数としてオブジェクトインスタンスを使用するにはどうすればよいですか?
class Classroom {
private:
Configuration conf;
public:
Classroom(Configuration conf_){
conf = conf_;
}
/** more member functions that use conf **/
};
しかし、私は、私はそれのためのテンプレートを使用することができれば、それは涼しいだろうと思いました。 Classroomオブジェクトの作成時にConfigurationオブジェクトがテンプレートの引数として渡されます。これは私が思い付いたものですが、それは動作しません:
template<Configuration &conf>
class Classroom {
int doSomething(int n){
// member function that uses data in Configuration object
return n + conf.config_1;
}
};
struct Configuration {
public:
int config_1;
};
int main() {
Configuration conf;
conf.config_1 = 95;
Classroom<conf> myClassroom;// doesn't work
}
それは言う:エラー:「confに」の値は、定数式では使用できません。
私には何が欠けていますか?
テンプレートのインスタンス化は、コンパイラによって行われます。だから、テンプレート引数として渡すものは、コンパイル時に知られているはずです –
キーワード 'typename or class'がありません。 – Raindrop7
_ "テンプレートを使うことができれば、もっとクールだと思っていました。"合理的なユースケースを1位にしてください。 – user0042