如何不关心类成员模板

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.为什么我要告诉编译器什么是T1T2呢?

tfo*_*one 5

你可以做的是把你的bar类写成模板类.而作为@nwp建议,你可以做一个make_bar功能作为辅助,以避免创建时expliciting你的类型barfoo,就像这样:

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)