Hum*_*awi 0 c++ templates c++11
我有两节课:
template <class T1, class T2>
class foo{
//something here
}
class bar{
bar()=delete;
bar(const foo& a): a(a){}
private:
foo a;
}
Run Code Online (Sandbox Code Playgroud)
此代码无效.
但是,我怎样才能实现这样的目标呢?
我知道我应该告诉我们使用的是什么类型foo
.但实际上,我不允许默认构造函数.所以,我不能让的对象bar
,而不给它合适的foo
.为什么我要告诉编译器什么是T1
和T2
呢?
你可以做的是把你的bar
类写成模板类.而作为@nwp建议,你可以做一个make_bar
功能作为辅助,以避免创建时expliciting你的类型bar
从foo
,就像这样:
template <class T1, class T2>
class foo {
//something here
};
template<class T1, class T2>
class bar {
public:
bar()=delete;
bar(const foo<T1,T2>& a): a(a){}
private:
foo<T1, T2> a;
};
template<class T1, class T2>
bar<T1, T2> make_bar(foo<T1,T2> const& f) {
return bar<T1, T2>{f};
}
int main() {
auto myFoo = foo<int, double>{};
auto barintdouble = make_bar(myFoo);
}
Run Code Online (Sandbox Code Playgroud)