|  |      1SJ2050cn      2022-06-29 10:26:00 +08:00  1 你既然把 B 当成 A 的模板参数,那么 A 类里面应该有 B 类型的属性,可以在 A 类构造函数的初始化列表中对该属性进行初始化,或者你只是在 A 类中的方法中用到了 B 类型的形参,那 B 类型应该在调用 A 类方法前初始化的。 | 
|  |      2newmlp      2022-06-29 10:27:24 +08:00  1 B 类怎么初始化,套模板后还是怎么初始化啊 | 
|  |      5ysc3839      2022-06-29 10:53:23 +08:00  1 请发完整代码 | 
|      6stein42      2022-06-29 11:13:42 +08:00 利用模版构造函数和可变长模版参数,按 C++ 11 标准可编译。 ``` template<typename T> class A { public: T t; template<typename ...ARGS> A(ARGS... args) : t{args...} {} }; class B { public: B(int x, int y) {} }; A<B> a{1, 2}; ``` | 
|      7stein42      2022-06-29 11:30:50 +08:00  1 如果 B 的构造函数有引用参数,还需要用到 std::forward 。 | 
|  |      8opiviqo OP @ysc3839  template <typename typeA> class A{ void Operation(double value) { type_a.Algorithm(value); } private: typeA type_a; }; class B{ public: B(int x1,int y1):x(x1),y(y1){} int x; int y; void Algorithm(double value){ ; } }; int main(){ A<B> a; } | 
|  |      9leimao      2022-06-30 08:21:29 +08:00  1 ``` template <typename typeA> class A{ A(int x1,int y1) : type_a{x1, y1} {} void Operation(double value) { type_a.Algorithm(value); } private: typeA type_a; }; ``` | 
|  |      10leimao      2022-06-30 08:27:33 +08:00 如果是更 general 的 use case ,你需要用到 perfect forwarding 。你可以看一下: https://leimao.github.io/blog/Universal-Reference-Perfect-Forwarding/ | 
|  |      11FrankHB      2022-06-30 08:56:58 +08:00  1 问题不成立。 A<B>里的构造函数直接取决于 A 的定义,而不一定依赖 B 。你不给 A 的明确定义,这个问题就无解,上面的多数回答也就是在这个基础上瞎蒙(假定 A 的构造函数里会初始化 B )。 有没有依赖 B 的构造函数都是个问题,就更别说有没有依赖签名为(int, int)的这个重载了。 | 
|  |      12segmentlll      2022-07-14 17:22:54 +08:00 B 实例化的时候才会调用构造函数,你想想自己什么时候实例化? A<B> 这里只是告诉编译器找 type 是 B 的模板实现。 |