我正在寻找一种从实际类型B和C中引用A的方法。在下面的代码中,您看到我的第一个倾向是尝试初始化它。我尝试过的其他尝试是使用完美转发,继承并向B和C添加更多模板参数。有人可以建议前进的路径吗?是否有新的结构可能会有所帮助?我关闭还是不可能?
struct D {};
struct E {};
template< typename U1 >
struct B
{
B() : u1(???)
U1& u1; // how to reference A's t variable?
};
template< typename U2 >
struct C
{
C() : u2(???)
U2& u2; // how to reference A's t variable?
};
template< typename T, typename U >
struct A
{
T t;
U u;
};
int main()
{
A< D, B< D > > a1;
A< E, C< E > > a2;
return 0;
}
答案 0 :(得分:1)
我认为OP想要的是模板模板参数 这是他的代码一经审查:
#include<memory>
struct D {};
struct E {};
template< typename U >
struct B
{
B(std::shared_ptr<U> v) : u{v} {}
std::shared_ptr<U> u;
};
template< typename U >
struct C
{
C(std::shared_ptr<U> v) : u{v} {}
std::shared_ptr<U> u;
};
template< typename T, template<typename> typename U >
struct A
{
A(): t{std::make_shared<T>()}, u{t} {}
std::shared_ptr<T> t;
U<T> u;
};
int main()
{
A< D, B > a1;
A< E, C > a2;
return 0;
}